C++类中静态字符串的奇怪编译器错误
C++ Strange Compiler Errors with Static Strings in a Class
我有一个程序,它在构建失败后在编译器控制台中输出以下内容:
1>------ Build started: Project: BlackjackAttack, Configuration: Debug Win32 ------
1>Build started 9/18/2012 10:59:28 PM.
1>InitializeBuildStatus:
1> Touching "DebugBlackjackAttack.unsuccessfulbuild".
1>ClCompile:
1> main.cpp
1>c:bjablackjackattackconfig.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:bjablackjackattackconfig.h(5): error C2146: syntax error : missing ';' before identifier 'GAME_NAME'
1>c:bjablackjackattackconfig.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1> Display.cpp
1>c:bjablackjackattackconfig.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:bjablackjackattackconfig.h(5): error C2146: syntax error : missing ';' before identifier 'GAME_NAME'
1>c:bjablackjackattackconfig.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1> Config.cpp
1>c:bjablackjackattackconfig.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:bjablackjackattackconfig.h(5): error C2146: syntax error : missing ';' before identifier 'GAME_NAME'
1>c:bjablackjackattackconfig.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:bjablackjackattackconfig.cpp(7): error C2039: 'GAME_NAME' : is not a member of 'Config'
1> c:bjablackjackattackconfig.h(1) : see declaration of 'Config'
1> Generating Code...
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.32
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
配置.h:
class Config {
public:
static const int DEFAULT_CONSOLE_COLOR = 7;
static const string GAME_NAME;
};
配置.cpp:
#include <string>
#include "Config.h"
using std::string;
const string Config::GAME_NAME = "Name";
主.cpp:
#include <iostream>
#include "Config.h"
#include "Display.h"
int main(int argc, char *argv[]) {
return 0;
}
有人可以解释为什么我的程序输出上述错误吗?
谢谢你的时间。
这是由于在整个项目中包含 Config.h 文件的方式造成的。
由于您的 Config 类引用 std::string,因此在声明类之前必须包含 std::string。
在您的 Config.cpp 文件中,您已经解决了冲突,但是您没有在 main.cpp 文件中执行相同的操作。
您有两种选择来解决问题。
每次包含"Config.h"时,您都包含string.h,并在其上方的行上写下"using std::string"。
您可以在 Config.h 文件的顶部包含 string.h 以及 "using std::string;" 指令。
以上所有内容都是不正确的,尽管这里看到的 #include 模式并不"好"。
问题是在使用 std::string 之前不包括在内。最好包含在 config.cpp 中,然后"使用命名空间 std"。
真正的问题是你在config.h中使用string
而不是std::string
。移动东西只会掩盖问题。
您可以将using std::string
放在 config.h 中,但这是不受欢迎的 - 它会在任何包含它的源中引入不必要的符号。
相关文章:
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++,我收到一个无法理解的编译器错误
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 重载方法的方式会在使用临时调用时生成编译器错误
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- 编译器错误:destuctor 的更宽松的抛出说明符
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- C++ G++ 编译器 - 错误:隐式声明的定义
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 模板模板参数和模板别名:编译器错误?
- C++ 编译器错误:P1LinkedList.cpp:145:错误:重载的"to_string(int&)"调用不明确
- 在gcc中意外调用了Const重载.编译器错误或兼容性修复程序
- C1001内部编译器错误是由于矢量初始化(如数组)引起的
- 编译器错误(英特尔并行工作室 2019 与 Visual Studio 社区 2019)
- 如何在C++中克服此 C4430 编译器错误?
- 尝试使用 WinBGI 显示文本时出现编译器错误
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- C++自定义分配器大小参数作为模板参数会引发编译器错误