C++不能从类调用公共方法:对'<ClassName>::<MethodName>'的未定义引用



我有一个类(MethodClass.h和MethodClass.cpp文件)和一个main.cpp

主要我调用构造函数,然后调用方法。

构造函数工作正常,但对于该方法,我收到错误:"test/main.cpp:13:对'MethodClass::testMethod()'的未定义引用"

我用这个测试项目简化了问题:

MethodClass.h

#ifndef METHODCLASS_H
#define METHODCLASS_H
#include <cstdlib>
#include <iostream>
class MethodClass {
public:
    MethodClass();
    MethodClass(const MethodClass& orig);
    virtual ~MethodClass();
    void testMethod();
private:
};
#endif /* METHODCLASS_H */

方法类.cpp:

#include "MethodClass.h"
using namespace std;
MethodClass::MethodClass() {
    cout << "Constructor: MethodClass" << endl;
}
MethodClass::MethodClass(const MethodClass& orig) {}
MethodClass::~MethodClass() {}
void testMethod(){
    cout << "testMethod" << endl;
}

主.cpp:

#include <cstdlib>
#include "MethodClass.h"
#include "MethodClass.h"
using namespace std;
int main(int argc, char** argv) {
    MethodClass mClass = MethodClass();
    cout << "hallo" << endl;
    mClass.testMethod();
    return 0;
}
  • 问题出在main.cpp的最后一行:mClass.testMethod();

如果我删除这个,构造函数工作正常 - 结果:构造函数:方法类喂

  • 也很奇怪,我什至不必在主.cpp中包含"MethodClass.h"......

如果我也记住第一行://#include"MethodClass.h",它仍然很好,这正常吗,或者你能向我解释为什么这有效吗?

顺便说一句:我正在使用带有 MinGW 编译器的 Netbeans 8.0.2

将 testMethod 的实现更改为以下内容:

void MethodClass::testMethod(){
    cout << "testMethod" << endl;
}

void testMethod() 只是一个全局函数 testMethod(),没有容器类。.cpp