假设C ++错误C4430 int

时间:2012-12-14 09:12:46

标签: c++ string compiler-errors int identifier

我是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呢?

感谢您的帮助:)

3 个答案:

答案 0 :(得分:2)

为了使用string作为变量的类型,您需要

  • 包含声明它的标题(#include <string>
  • 使用完整限定类型,例如std::string或使用目录using namespace std;但请注意,不建议在标头文件中使用using(请参阅"using namespace" in c++ headers

如果您只尝试其中一种,它将无效。

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

答案 1 :(得分:0)

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

你的问题是缺少include,当你包含string.h时,你仍然忘记了“string class”的std命名空间。

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

答案 2 :(得分:0)

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

然后您有一个链接器错误,该错误与该行代码无关。您似乎有一个'Convert'类,缺少'stringToInt'函数的实现。