Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对象文件中未解析的外部符号_C++_Visual Studio_Visual C++_Unresolved External - Fatal编程技术网

C++ 对象文件中未解析的外部符号

C++ 对象文件中未解析的外部符号,c++,visual-studio,visual-c++,unresolved-external,C++,Visual Studio,Visual C++,Unresolved External,在VisualStudio中编码期间,我遇到了一个未解决的外部符号错误 我不知道该怎么办。我不知道怎么了。 你能给我解释一下吗?我应该在哪里查找哪种错误 1>Form.obj : error LNK2019: unresolved external symbol "public: class Field * __thiscall Field::addField(class Field *)" (?addField@Field@@QAEPAV1@PAV1@@Z) referenced in

在VisualStudio中编码期间,我遇到了一个未解决的外部符号错误 我不知道该怎么办。我不知道怎么了。 你能给我解释一下吗?我应该在哪里查找哪种错误

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
1>Form.obj:错误LNK2019:未解析的外部符号“public:class-Field*\uu thiscall-Field::addField(class-Field*)”(?addField@Field@@QAEPAV1@PAV1@@Z) 函数“public:void u thiscall Form::parse(类std::basic_stringstream&)”中引用(?parse@Form@@Qaexav?$basic_stringstream@DU?$char_traits@D@性病病毒$allocator@D@2@@@std@@@Z)
1> Form.obj:错误LNK2019:未解析的外部符号“public:virtual void\u thiscall Field::parse(class std::basic\u stringstream&)”(?parse@Field@@UAEXAAV?$basic_stringstream@DU?$char_traits@D@性病病毒$allocator@D@函数“public:\u thiscall InputField::InputField(类std::basic\u stringstream&)”中引用了2@@std@@@Z)(??0输入字段)@@QAE@AAV?$basic_stringstream@DU?$char_traits@D@性病病毒$allocator@D@2@@@std@@@Z)
1> Form.obj:错误LNK2001:未解析的外部符号“public:virtual void u thiscall Field::prompt(void)”(?prompt@Field@@UAEXXZ)
1> Form.obj:错误LNK2001:未解析的外部符号“public:virtual class std::basic_string uu thiscall Field::getName(void)”(?)?getName@Field@@阿联酋?AV?$basic_string@DU?$char_traits@D@性病病毒$allocator@D@2@@std@@XZ)
1> Form.obj:错误LNK2001:未解析的外部符号“public:virtual class std::basic_string\u thiscall Field::getType(void)”(?getType@Field@@阿联酋?AV?$basic_string@DU?$char_traits@D@性病病毒$allocator@D@2@@std@@XZ)
1> Form.obj:错误LNK2001:未解析的外部符号“public:virtual void u thiscall Field::description(void)”(?describe@Field@@UAEXXZ)
1> C:\Users\tomy\Documents\Visual Studio 2010\Projects\zapoctovkac++\Debug\zapoctovkac++.exe:致命错误LNK1120:6个未解析的外部

检查您是否将引用的所有源文件包括在您的解决方案中

如果您没有在项目中包含类
字段
的源文件(以及实现),则不会生成它,并且在编译过程中无法链接


或者,您可能正在使用静态或动态库,但忘记了告诉链接器
.lib
s?

它似乎缺少库或包含,您可以尝试找出库中具有getName、getType等的类,并将其放在头文件中或使用
\include

此外,如果这些类恰好来自外部库,请确保在项目文件中引用它们

  • 单击项目属性
  • 转到配置属性,C/C++, 生成,验证您是否指向“附加”下的abc.lib位置 包括目录。在链接器的“输入”下,确保您具有 其他依赖项下的abc.lib

  • 此错误通常意味着某些函数有声明,但没有定义

    例如:

    // A.hpp
    class A
    {
    public:
      void myFunc(); // Function declaration
    };
    
    // A.cpp
    
    // Function definition
    void A::myFunc()
    {
      // do stuff
    }
    
    在您的情况下,无法找到定义。问题可能是您包含了一个头文件,其中包含了一些函数声明,但您:

  • 不要在cpp文件中定义函数(如果您自己编写了此代码)
  • 不要包含包含定义的lib/dll文件
  • 一个常见错误是将函数定义为独立函数,而忘记了.cpp文件中的类选择器,例如
    A::

    错误:
    void myFunc(){/*do stuff*/}


    对:
    void A::myFunc(){/*do stuff*/}
    我只是很难做到这一点。一切都是按逻辑设置的。我声明了一个构造函数,但没有定义它

    class SomeClass
    {
       SomeClass();  // needs the SomeClass::SomeClass(){} function defined somewhere, even here
    }
    

    当我忘记了一些基本的东西时,我几乎把脑袋撞到键盘上。

    < P>我在很久以前第一次做了一些C++,当我忘记添加CordNe::函数定义的前缀时,我就得到了这个错误,因为这是C++的一个独特之处。所以请记住也要检查它!

    指针< /P>


    我遇到了这个问题,并用指针解决了它。我知道这不是你的问题,但我想我应该提到它,因为我真希望在一小时前看到它时它就在这里。我的问题是关于声明一个静态成员变量而不定义它(定义需要在其他设置之后进行)当然,指针不需要定义。同样基本的错误:P

    除了上面Chris Morris的优秀答案之外,我还发现了一种非常有趣的方法,如果您调用的虚拟方法没有设置为pure,但没有自己的实现,那么您可能会收到同样的错误。原因完全相同(编译器找不到该方法的实现,因此出错),但我的IDE一点也没有发现这个错误

    例如,以下代码将获得具有相同错误消息的编译错误:

    //code testing an interface
    class test
    {
       void myFunc(); 
    }
    
    //define an interface
    class IamInterface
    {
        virtual void myFunc();
    }
    
    //implementation of the interface
    class IamConcreteImpl
    {
        void myFunc()
        {
           1+1=2;
        }
    }
    
    但是,将IamInterface myFunc()更改为纯虚拟方法(必须实现的方法,而不是可以重写的虚拟方法)将消除编译错误

    //define an interface
    class IamInterface
    {
        virtual void myFunc() = 0;
    }
    

    希望这有助于下一位StackOverFlow人员逐步了解代码!

    请参阅MSDN,它列出了导致LNK2019的常见问题的详细列表。

    请确保使用

    #ifndef YOUR_HEADER_H
    #define YOUR_HEADER_H
    
    // your header code here
    
    #endif
    

    如果您不

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

    #ifdef __cplusplus
    extern "C"
    {
    #endif
    
    最后呢?

    #ifdef __cplusplus
    }
    #endif
    

    我相信关于原因和补救措施的大部分观点都已包含在所有内容中
    #include "ClassB" 
    
    class ClassB; // this solved the problem
    
    class ClassA{
        void foo(){
            ClassB* tmp = new ClassB();
            // ...
        }
    };
    
    #include WtsApi32.h
    
    #pragma comment(lib, "Wtsapi32.lib") 
    
    // ... 100 LOC here ...
    namespace NS {
    // ... 100 more LOC here ...
    static int var;
    
    extern int var;
    
    namespace NS {
         extern int var;
    }
    
    #ifndef XYZ_h
    #define XYZ_h
    class XYZ
    {
        public:
        void xyzMethod(){}
    }
    #endif
    
    template<typename T>
    MyClassName {
      void someFunction() {
        // Do something
        ...
      }
      void anotherFunction() {
        // Do something else
        ...
      }
    }
    
    template<typename T>
    MyClassName {
      void someFunction();
      void anotherFunction();
    }
    
    void MyClassName::someFunction() {
      // Do something
      ...
    }
    void MyClassName::anotherFunction() {
      // Do something else
      ...
    }
    
    LIBRARY   DEMO
    EXPORTS
       ExistingFunction   @1
       MyNewFunction      @2
    
    // A.hpp
    class __declspec(dllimport) A
    {
       public: void myFunc();
    
       // Function declaration
    };