简体   繁体   English

无法解析的外部符号-C ++

[英]Unresolved external symbol - C++

I tried to start to code in C++ after a long time. 很久以后,我试图开始用C ++编写代码。
I started a little project and got an error after little time :( 我开始了一个小项目,经过一段时间后出现了一个错误:(

I have two classes: MyClass and OtherClass (just as an example) 我有两个类:MyClass和OtherClass(仅作为示例)

My main.cpp: 我的main.cpp:

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

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

    return 0;
}  

OtherClass.h: OtherClass.h:

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

private:
    int a, b, c;
};

OtherClass.cpp: 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: MyClass.h:

#pragma once
#include "OtherClass.h"

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

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

MyClass.cpp: MyClass.cpp:

#include "MyClass.h"

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

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

For me everything seems fine. 对我来说,一切似乎都很好。
I'm used to code in C# so maybe I'm missing something important (I guess because I'm getting this error). 我曾经用C#编写代码,所以也许我错过了一些重要的事情(我想是因为出现此错误)。

The error I get: 我得到的错误:

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

Hope you can help me :) 希望你能帮我 :)

In MyClass.cpp, the function: 在MyClass.cpp中,该函数:

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

Should be qualified with a class name: 应使用类名进行限定:

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

Your problem is the definition of doSomething() : you defined a global function rather than a member function: 您的问题是doSomething()的定义:您定义了全局函数而不是成员函数:

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

You meant to write 你想写

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

In your definition, you forgot MyClass:: 在您的定义中,您忘记了MyClass::

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM