1

私は C++ の初心者で、単純な構造体を含む C++ の小さなヘッダー ファイルしか持っていません。

PGNFinder.h:

#ifndef PGNFINDER_H
#define PGNFINDER_H

struct Field
{
    int Order;
    string Name;
   //more variables but doesn't matter for now
};

#endif

これにより、次のエラーが発生します。

error C2146: syntax error : missing ';' before identifier 'Name'    
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

次のように変更すると:

   struct Field
{
    int Order;
    std::string Name;
};

.exe ファイルと .obj ファイルでエラーが発生する

error LNK1120: 1 unresolved externals   (in the .exe file)
error LNK2019: unresolved external symbol "int __cdecl Convert::stringToInt(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?stringToInt@Convert@@YAHV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "private: void __thiscall CAN::calculateMessageLength(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?calculateMessageLength@CAN@@AAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)

そして追加すると

#include <string> 

に戻ります

string Name;

最初と同じエラーが発生します。では、ヘッダー ファイルが int と string を認識できないのはなぜでしょうか?

助けてくれてありがとう :)

4

3 に答える 3

2

変数の型として使用するにはstring、次のことを行う必要があります。

  • 宣言されているヘッダーを含める(#include <string>
  • std::stringusingディレクトリなどまたはを使用して完全修飾型を使用するusing namespace std;注:ただし、usingヘッダーファイルでは推奨されません(c ++ヘッダーの「usingnamespace」を参照) 。

これらの1つだけを試してみると、機能しません。

ただし、2番目のエラーメッセージはリンカーの問題を示しているようです。

于 2012-12-14T09:17:21.363 に答える
0

std::string に変更すると、コンパイラ エラーが明確に修正されます。

次に、そのコード行に関連しないリンカ エラーが発生します。「stringToInt」関数の実装が欠落している「Convert」クラスがあるようです。

于 2012-12-14T09:21:15.770 に答える
0

コメント機能を多用しがちなので。

あなたの問題はインクルードの欠落です.string.hをインクルードしたとき、「文字列クラス」のstd-namespaceをまだ忘れていました.

そのため、a using namespace std(初心者のベストプラクティスの場合、ほとんどのものは std のものである可能性が高いため) を使用するか、構造体内で文字列を std::string として宣言します。

于 2012-12-14T09:17:01.503 に答える