未解析的外部符号 - C ++

时间:2013-11-20 00:41:28

标签: c++ compiler-errors

经过很长一段时间我试着用C ++开始编码 我开始了一个小项目并在一段时间后出错:(

我有两个类:MyClass和OtherClass(仅作为示例)

我的main.cpp:

#include "MyClass.h"
#include "OtherClass.h"

int main(){
    OtherClass* otherClass = MyClass::doSomething();

    return 0;
}  

OtherClass.h:

#pragma once
class OtherClass
{
public:
OtherClass(int a, int b, int c);
~OtherClass();

private:
    int a, b, c;
};

OtherClass.cpp:

#include "OtherClass.h"

OtherClass::OtherClass(int a, int b, int c)
{
    this->a = a;
    this->b = b;
    this->c = c;
}

OtherClass::~OtherClass(){}

MyClass.h:

#pragma once
#include "OtherClass.h"

class MyClass
{
public:
    static OtherClass* doSomething();

private:
    MyClass();
    ~MyClass();
};

MyClass.cpp:

#include "MyClass.h"

MyClass::MyClass(){}
MyClass::~MyClass(){}

OtherClass* doSomething(){
    return new OtherClass(0, 0, 0);
}

对我来说,一切似乎都很好 我习惯用C#编码所以也许我错过了一些重要的东西(我猜是因为我收到了这个错误)。

我得到的错误:

Error   1   error LNK2019: Unresolved external symbol ""public: static class OtherClass * __cdecl MyClass::doSomething(void)" (?doSomething@MyClass@@SAPAVOtherClass@@XZ)" in function "_main". D:\Projects\TestProject\main.obj    TestProject

希望你能帮助我:)。

3 个答案:

答案 0 :(得分:4)

在MyClass.cpp中,函数:

OtherClass* doSomething(){
    return new OtherClass(0, 0, 0);
}

应该使用班级名称进行限定:

OtherClass* MyClass::doSomething(){
    return new OtherClass(0, 0, 0);
}

答案 1 :(得分:2)

你的问题是doSomething()的定义:你定义了一个全局函数而不是一个成员函数:

OtherClass* doSomething(){
    return new OtherClass(0, 0, 0);
}

你打算写

OtherClass* MyClass::doSomething(){
    return new OtherClass(0, 0, 0);
}

答案 2 :(得分:1)

在您的定义中,您忘记了MyClass::

OtherClass* MyClass::doSomething(){
    return new OtherClass(0, 0, 0);
}