在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

当前回答

导致“未解析的外部符号”错误的一个可能原因是函数调用约定。

确保所有源文件都使用相同的标准(.c或.cpp),或者指定调用约定。

否则,如果一个文件是C文件(source.c),另一个文件是.cpp文件,并且它们链接到相同的头文件,那么将抛出“未解析的外部符号”错误,因为该函数首先被定义为C cdecl函数,但随后使用相同头文件的c++文件将寻找c++函数。

为了避免“未解析的外部符号错误”,请确保函数调用约定在使用它的文件中保持相同。

其他回答

在我的例子中,我需要将函数名添加到DEF文件中。

LIBRARY   DEMO
EXPORTS
   ExistingFunction   @1
   MyNewFunction      @2

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

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

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

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

#ifdef __cplusplus
extern "C"
{
#endif

这些在最后

#ifdef __cplusplus
}
#endif

是什么导致了我的这种情况:

我有一个很大的文件Foo.cpp,没有Foo.h。Foo.cpp的开头是这样的:

// ... 100 LOC here ...
namespace NS {
// ... 100 more LOC here ...
static int var;

我删除了“static”关键字,并添加了一个Foo.h:

extern int var;

你看到错误了吗?

我完全忽略了var最初是在名称空间中定义的,因为名称空间声明隐藏在其他代码中。修复是这样改变extern:

namespace NS {
     extern int var;
}

I believe most of the points regarding the causes and remedies have been covered by all contributors in this thread. I just want to point out for my 'unresolved external' problem, it was caused by a datatype defined as macro that gets substituted differently than expected, which results in that incorrect type being supplied to the function in question, and since the function with type is never defined, it couldn't have been resolved. In particular, under C/C++ -> Language, there is an attribute called 'Treat WChar_t As Built in Type, which should have been defined as 'No (/Zc:wchar_t-)' but did not in my case.