经过很长一段时间我试着用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
希望你能帮助我:)。
答案 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);
}