LNK2019:函数'function'中引用的未解析的外部符号'symbol';致命错误LNK1120:1未解决的外部问题

时间:2012-01-10 23:16:28

标签: c++

您好我制作了一个简单的C ++程序而且我遇到了错误而且我不知道我做错了什么。我是C ++语法的新手,所以我无法弄清楚我犯了什么错误导致了所述的链接器错误。以下是生成此错误的示例代码:

ITest.h

#ifndef ITest_H
#define ITest_H

//#[ ignore
#ifdef _MSC_VER
// disable Microsoft compiler warning (debug information truncated)
#pragma warning(disable: 4786)
#endif
//#]

//## auto_generated
#include <string>
//## auto_generated
#include <algorithm>
//## auto_generated
//## link itsNmNeighborhoodEntry
class NmNeighborhoodEntry;
//## class ITest
class ITest {
//#[ ignore

    ////    Constructors and destructors    ////

public :

    //## auto_generated
    virtual ~ITest();

    ////    Relations and components    ////

protected :

    NmNeighborhoodEntry* itsNmNeighborhoodEntry;        //## link itsNmNeighborhoodEntry
};

#endif

ITest.cpp

//## auto_generated
#include "ITest.h"
//## link itsNmNeighborhoodEntry
#include "NmNeighborhoodEntry.h"

//## class ITest
ITest::~ITest() {
}

Test1.h

#ifndef Test1_H
#define Test1_H

//#[ ignore
#ifdef _MSC_VER
// disable Microsoft compiler warning (debug information truncated)
#pragma warning(disable: 4786)
#endif
//#]

//## auto_generated
#include <string>
//## auto_generated
#include <algorithm>
//## class Test1
#include "ITest.h"
//## auto_generated
class NmNeighborhoodEntry;

//## class Test1
class Test1 : public ITest {
//#[ ignore

    // Default Constructor is Private
    public:
       Test1();


    // Default Copy Constructor is Private
    private:
       Test1(const Test1& self);


    // Default Assignment Operator is Private
    private:
       Test1& operator=(const Test1& aTest1);
//#]

    ////    Constructors and destructors    ////

public :

    //## auto_generated
    ~Test1();

    NmNeighborhoodEntry* getNmNeighborhoodEntry();
};

#endif

Test1.cpp

//## auto_generated
#include "Test1.h"
//## auto_generated
#include "NmNeighborhoodEntry.h"

NmNeighborhoodEntry* itsNmNeighborhoodEntry;

//## class Test1
Test1::~Test1() {
}

Test1::Test1() {
}


NmNeighborhoodEntry* getNmNeighborhoodEntry() { 
    //return itsNmNeighborhoodEntry;
    return NULL;
}

NmNeighborhoodEntry.h

#ifndef NmNeighborhoodEntry_H
#define NmNeighborhoodEntry_H

//#[ ignore
#ifdef _MSC_VER
// disable Microsoft compiler warning (debug information truncated)
#pragma warning(disable: 4786)
#endif
//#]

//## auto_generated
#include <string>
//## auto_generated
#include <algorithm>

//## class NmNeighborhoodEntry

class NmNeighborhoodEntry {
//#[ ignore

    // Default Constructor is Private
    private:
       NmNeighborhoodEntry();


    // Default Copy Constructor is Private
    private:
       NmNeighborhoodEntry(const NmNeighborhoodEntry& self);


    // Default Assignment Operator is Private
    private:
       NmNeighborhoodEntry& operator=(const NmNeighborhoodEntry& aNmNeighborhoodEntry);
//#]

    ////    Constructors and destructors    ////

public :

    //## auto_generated
    ~NmNeighborhoodEntry();

    bool myIsPending;       //## attribute myIsPending

    unsigned short index;       //## attribute myNodeIndex
};

#endif

NmNeighborhoodEntry.cpp

//## auto_generated
#include "NmNeighborhoodEntry.h"

//## class NmNeighborhoodEntry
NmNeighborhoodEntry::~NmNeighborhoodEntry() {
}

driver.cpp

//#include "ITest.h"
#include "Test1.h"
//#include "Test2.h"
#include "NmNeighborhoodEntry.h"

Test1 *test1;
//Test2 *test2;
NmNeighborhoodEntry* myNmNeighborhoodEntry;

void main() {
    test1 = new Test1;
    //test2 = new Test2;

    //test1->itsNmNeighborhoodEntry = NULL;
    myNmNeighborhoodEntry = test1->getNmNeighborhoodEntry();

}

1 个答案:

答案 0 :(得分:0)

您收到的错误消息表示未定义引用的“符号”。它还告诉您“函数”在哪个“函数”中引用了“符号”。

您可能在某处缺少函数或方法实现。

编辑:

NmNeighborhoodEntry* getNmNeighborhoodEntry() { 
    //return itsNmNeighborhoodEntry;
    return NULL;
}

这是你的错误;它需要让类名限定为这样。

NmNeighborhoodEntry* Test1::getNmNeighborhoodEntry() { 
    //return itsNmNeighborhoodEntry;
    return NULL;
}

你这样做的方式声明了一个全局函数。您需要在函数名称之前使用Test1 ::来向编译器指示这是类Test1的方法的实现。