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::string或通过 using 目录using namespace std;注意,但是,using在头文件中不建议这样做(请参阅c++ headers 中的“使用命名空间”

如果你只尝试其中一种,它就行不通。

但是,您的第二条错误消息似乎指向链接器问题。

于 2012-12-14T09:17:21.363 回答
0

因为我倾向于经常使用评论功能。

您的问题是缺少包含,当您包含 string.h 时,您仍然忘记了“字符串类”的标准命名空间。

所以要么使用using namespace std(对于初学者最佳实践,因为大多数东西很可能是 std 东西)或者在你的结构中将你的字符串声明为 std::string 。

于 2012-12-14T09:17:01.503 回答
0

将其更改为 std::string 清楚地修复了编译器错误。

然后你有一个与那行代码无关的链接器错误。您似乎有一个“转换”类,其中缺少“stringToInt”函数的实现。

于 2012-12-14T09:21:15.770 回答