在Visual Studio中编码时,我得到了一个未解决的外部符号错误 我不知道该怎么办我不知道怎么了。 你能帮我破译一下吗?我应该在哪里寻找什么样的错误?

1>Form.obj : error LNK2019: unresolved external symbol "public: class Field * __thiscall Field::addField(class Field *)" (?addField@Field@@QAEPAV1@PAV1@@Z) referenced in function "public: void __thiscall Form::parse(class std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?parse@Form@@QAEXAAV?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1>Form.obj : error LNK2019: unresolved external symbol "public: virtual void __thiscall Field::parse(class std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?parse@Field@@UAEXAAV?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: __thiscall InputField::InputField(class std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > &)" (??0InputField@@QAE@AAV?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1>Form.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Field::prompt(void)" (?prompt@Field@@UAEXXZ)
1>Form.obj : error LNK2001: unresolved external symbol "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Field::getName(void)" (?getName@Field@@UAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
1>Form.obj : error LNK2001: unresolved external symbol "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Field::getType(void)" (?getType@Field@@UAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
1>Form.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Field::describe(void)" (?describe@Field@@UAEXXZ)
1>C:\Users\tomy\Documents\Visual Studio 2010\Projects\zapoctovkac++\Debug\zapoctovkac++.exe : fatal error LNK1120: 6 unresolved externals

当前回答

确保你用

#ifndef YOUR_HEADER_H
#define YOUR_HEADER_H

// your header code here

#endif

如果你不这样做,就会发生不好的事情,包括这件事

其他回答

我在很长一段时间内第一次做一些c++,当我忘记为函数定义添加ClassName::前缀时,我得到了这个错误,因为这对c++来说有点独特。所以也要记得检查一下!

检查是否包含了您所引用的解决方案中的所有源文件。

如果你没有在项目中包含Field类的源文件(以及实现),它将不会被构建,你将无法在编译期间进行链接。

或者,也许您正在使用静态或动态库,并且忘记告诉链接器有关.lib的信息?

我的问题是:我必须对一个“外部未解决”的课程做前向声明。

在我得到错误的文件中,我必须放这样的东西:

#include "ClassB" 

class ClassB; // this solved the problem

class ClassA{
    void foo(){
        ClassB* tmp = new ClassB();
        // ...
    }
};

当然,我的项目要复杂得多,这只是一个片段示例。同样,在使用名称空间时,也要声明它们。

我刚刚看到了一个问题,我不能在.cpp文件中调用main函数,在.h文件中正确声明,并在.c文件中定义。遇到一个链接错误。同时,我可以从通常的。c文件调用函数。这可能取决于调用约定。解决方案是在每个.h文件中添加以下预proc行:

#ifdef __cplusplus
extern "C"
{
#endif

这些在最后

#ifdef __cplusplus
}
#endif

它看起来缺少一个库或包含,你可以尝试找出你的库的什么类有getName, getType等…然后放到头文件中或者使用#include。

此外,如果这些碰巧来自外部库,请确保在项目文件中引用它们。例如,如果这个类属于abc。lib然后在你的Visual Studio

单击Project Properties。 进入配置属性,C/ c++, 生成,验证你指向abc。附加库位置 包括目录。在链接器,输入,确保你有 美国广播公司(abc)。附加依赖项下的lib。