"Expected unqualified-id before 'namespace'"错误
"Expected unqualified-id before 'namespace'" error
我有下面一段看似无害的代码:
#ifndef UI_H
#define UI_H
#include <string>
namespace ui
{
//Displays the main menu, showing loaded vocabulary cards
//
//Returns upon completion of display
void displayMainMenu();
//...More code like the above, just comments followed by functions
}
#endif
给我这个错误信息:
filepath/ui.h:6: error: expected unqualified-id before 'namespace'
我在这里做错了什么?
跟踪这类错误的一种方法是从头开始:
#include "filepath/ui.h"
int main () { return 0; }
可以编译吗?(这与您提供的ui.h的一小段代码一起工作得很好。)
像这样的错误通常是由于在前面的一些类声明中缺少分号引起的。所以让我们试着强制这个问题:struct Foo { int foo; } // Note the missing semicolon after the close brace.
#include "filepath/ui.h"
int main () { return 0; }
这当然不会编译干净。我得到一个复杂的包含路径跟踪,从我的testmain.cpp到你的filepath/ui.h到string…最终得到
/usr/include/i386/_types.h:37: error: two or more data types in declaration of '__int8_t'
所以这不是错误,但是缺少分号肯定会造成混乱。您的错误不是在<string>
的内部深处产生的,所以在尝试重新创建错误之前,让我们将测试程序设置为#include <string>
:
#include <string>
struct Foo { int foo; } // Note the missing semicolon after the close brace.
#include "filepath/ui.h"
int main () { return 0; }
错误信息是
In file included from testmain.cpp:5:
filepath/ui.h:6: error: expected unqualified-id before 'namespace'
就是这样。因此,在filepath/ui.h之前#包含的其他一些头文件有一个格式不正确的类声明。
附录
有时使用不同的编译器会有所帮助。对于这种常见的编程错误,c++的处理方式非常糟糕。用clang编译上面的代码会得到
testmain.cpp:4:2: error: expected ';' after struct
所以,tada, clang已经把注意力集中在这个问题上了。
发生的事情是,当编译器遇到麻烦时,它会对你的代码进行一些修复,使其语法正确。编译器错误消息基于此自动更正。注意:这种自动更正通常是一件非常好的事情。如果没有它,编译器将不得不在第一个错误时关闭。由于程序员不可避免地会犯不止一个错误,因此一次找出一个错误将是非常痛苦的。
我一点也不知道g++应用了什么愚蠢的纠正来修复丢失的分号问题,除了不添加明显丢失的分号。Clang添加了缺少的分号,这就是它抱怨的地方。
这个文件是从哪里包含的。文件没有任何问题你张贴;我怀疑正在发生的是包含它已经包含了<string>
(所以这个包含不做任何事情),并且
;
。这太奇怪了。是否有其他任何#定义的UI_H(这应该不会引起问题,但谁知道呢),或ui ?
同样的事情发生在#pragma一次(假设你的编译器支持它)?
您是否真的对文件进行了配对,以便所有其他代码都被注释掉?
(抱歉发布了更多的问题而不是答案)
我从谷歌搜索到这里。如果有人因为同样的错误进入这个页面,如果你试图在类范围内定义一个命名空间别名,你也会得到这个错误。
的例子:
namespace SomeLongNamespaceName { }
class SomeClass {
namespace X = SomeLongNamespaceName; // This is illegal and will give the
// compiler error from this question
};
更多信息在这里:c++命名空间别名在整个类范围
name"在我的例子中是一个错误。期望:' namespace '前的unqualified-id在文件顶部的一个头文件的类声明内的命名空间。所以我需要在最后的'}'
之后添加额外的分号。因此,如'};;;;'
将做
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 什么原因导致我的"‘FatalError’ in namespace ‘Foam’ does not name a type"错误?
- 错误:在 MacOS 上"no member named 'uint8_t' in the global namespace"
- VS 代码C++扩展给出错误"namespace has no member function"
- 在DX11应用程序中使用DirectXHelper.h会导致Visual Studio 2015中出现'namespace/class not found'错误
- 如何修复错误:未知的类型名称"namespace"
- " a namespace name is not allowed" javacpp 中的错误
- "Expected unqualified-id before 'namespace'"错误
- 命名空间错误'Not a namespace-name'
- C++:嵌套模板类错误"explicit specialization in non-namespace scope"