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 ==========

Config.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";

main.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ファイルで同じことをしていません。

問題を解決するには2つのオプションがあります。

  1. 「Config.h」を含めるたびに、string.hを含め、そのすぐ上の行に「usingstd::string」と記述します。

  2. Config.hファイルの先頭に「usingstd::string;」とともにstring.hをインクルードします。指令。

于 2012-09-19T03:18:34.810 に答える
0

上記のすべてが正しくありませんが、ここに表示される#includeパターンは「適切」ではありません。

問題は、std::stringを使用する前に含まれていないことです。config.cppに含めてから、「名前空間stdを使用する」ことをお勧めします。

于 2012-09-19T03:23:11.287 に答える
0

本当の問題は、config.hstringの代わりに使用していることです。std::string物事を動かすことは問題を隠すだけです。

config.hの内部に配置することもできusing std::stringますが、それは眉をひそめます-それを含むすべてのソースに不要なシンボルを導入します。

于 2012-09-19T03:23:37.340 に答える