在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

当前回答

导致此链接器错误的一个可能原因还可能是在头文件中声明但没有定义的内联函数,该头文件随后包含在其他地方。内联函数必须在使用它们的每个翻译单元中定义。

其他回答

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.

我刚刚也犯了同样的错误,我设法通过替换来避免它;头文件中使用{}。

#ifndef XYZ_h
#define XYZ_h
class XYZ
{
    public:
    void xyzMethod(){}
}
#endif

当它是void xyzMethod();它不想编译。

这是另一种检查的可能性,这次是我的问题。

我已经将函数添加到库中,并将库的输出文件夹包含在搜索路径中。

但是我也有一个文件夹,里面有之前列出的旧版本的库,所以VS使用的是旧的库,当然没有找到新函数。

只是花了几个小时才发现问题是我的主文件扩展名是。c而不是。cpp

:/

在我的情况下,我有多个名称空间在我的头文件中没有嵌套(一个接一个),但在我的源文件中,我不小心嵌套了一个名称空间在另一个:

// myExample.h

#ifndef MYEXAMPLE_H
#define MYEXAMPLE_H

namespace A
{
  void aFunc();
}

namespace B
{
  void bFunc();
}
// myExample.cpp

#include "myExample.h"

namespace A
{
  void aFunc()
  {
    ...
  }

  namespace B   // whoops! I nested this inside namespace A when I didn't mean to.
  {
    void bFunc()
    {
      ...
    }
  }
}
// main.cpp

#include "myExample.h"

int main()
{
  myExample::B::bFunc();
  
  return 0;
}

当我在Main中使用F12对函数“Go to definition”时,Visual Studio在源文件中找到了代码,尽管它是在一个更深层的命名空间中声明的。

调试技术

我在尝试调试问题时重命名函数时发现了这个问题。重命名预览窗口显示了一个“External References”节点,其中源文件中的函数意外地嵌套在另一个名称空间下。