我收到错误
错误:在'('token
之前的预期说明符限定符列表
在下面以(const char)*开头的行上,我不明白这个错误意味着什么。这是什么意思? (请注意,关于此主题还有另一个问题,但另一个问题中的一个答案并不能解释错误的含义。)
#include "stddef.h" /* size_t */
typedef struct {
size_t size;
(const char)* strings[];
} STRLIST;
static STRLIST listMediaType = {
7,
{
"Book",
"Map",
"Booklet",
"Pamphlet",
"Magazine",
"Report",
"Journal"
}
};
答案 0 :(得分:1)
您可以通过删除括号来解决问题。只有 类 修复问题,因为C规范禁止使用初始化列表初始化灵活数组成员。然而,clang(我假设gcc)允许它作为扩展。如果您使用-Weverything
进行编译,则会收到警告,指出您正在使用扩展程序。
至于为什么不允许括号:要真正理解你需要阅读规范中的" 6.7声明" 部分,这是38页长。简短的回答是编译器期待一个声明。声明以各种说明符和限定符开头,其中没有一个以括号开头。
因此,对错误消息的正确解释(来自编译器的观点)是:
"我期待结构成员的声明,这应该是 从说明符或限定符开始,但你给了我一个 括弧。不要这样做。"
答案 1 :(得分:0)
此特定错误消息是由于类型+修饰符I.E周围的额外parens。围绕var appMenuTemplate = "
<nav class='menu'>
<ul>
<li ng-repeat='item in menuCtrl.menuItems'>
{{ item }}
</li>
</ul>
</nav>
";
var appMenuController = function() {
var self = this;
self.menuItems = [
'home',
'about',
'portfolio',
'experience'
];
};
angular
.module('exampleApp', [])
.component('appMenu', {
template: appMenuTemplate,
controller: appMenuController,
controllerAs: 'menuCtrl'
});
的额外事件。
删除额外的parens,所有错误都消失了。
请注意,仍会有关于listMediaType被定义但未使用的警告。