1

我有一个程序在构建失败后在编译器控制台中输出以下内容:

1>------ Build started: Project: BlackjackAttack, Configuration: Debug Win32 ------
1>Build started 9/18/2012 10:59:28 PM.
1>InitializeBuildStatus:
1>  Touching "Debug\BlackjackAttack.unsuccessfulbuild".
1>ClCompile:
1>  main.cpp
1>c:\bja\blackjackattack\config.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\bja\blackjackattack\config.h(5): error C2146: syntax error : missing ';' before identifier 'GAME_NAME'
1>c:\bja\blackjackattack\config.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>  Display.cpp
1>c:\bja\blackjackattack\config.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\bja\blackjackattack\config.h(5): error C2146: syntax error : missing ';' before identifier 'GAME_NAME'
1>c:\bja\blackjackattack\config.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>  Config.cpp
1>c:\bja\blackjackattack\config.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\bja\blackjackattack\config.h(5): error C2146: syntax error : missing ';' before identifier 'GAME_NAME'
1>c:\bja\blackjackattack\config.h(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\bja\blackjackattack\config.cpp(7): error C2039: 'GAME_NAME' : is not a member of 'Config'
1>          c:\bja\blackjackattack\config.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;
}

有人可以解释为什么我的程序输出上述错误吗?

感谢您的时间。

4

3 回答 3

2

这是由您在整个项目中包含 Config.h 文件的方式引起的。

由于您的 Config 类引用 std::string ,因此您必须在声明类之前包含 std::string 。

在您的 Config.cpp 文件中,您已经解决了冲突,但是您在 main.cpp 文件中没有做同样的事情。

您有两种选择来解决您的问题。

  1. 每次包含“Config.h”时,都会包含 string.h 并在其正上方的行上写下“using std::string”。

  2. 您在 Config.h 文件的顶部包含 string.h 以及“使用 std::string;” 指示。

于 2012-09-19T03:18:34.810 回答
0

以上所有内容都不正确,尽管此处看到的#include 模式并不“好”。

问题是在使用 std::string 之前不包括在内。最好包含在 config.cpp 中,然后是 'using namespace std'。

于 2012-09-19T03:23:11.287 回答
0

真正的问题是您正在使用string而不是std::string在您的 config.h 中。移动东西只会掩盖问题。

您可以将using std::stringconfig.h 放在里面,但这是不受欢迎的 - 它会在包含它的任何源中引入不必要的符号。

于 2012-09-19T03:23:37.340 回答