C ++不能从类调用public方法:未定义引用&#39; <classname> :: <methodname>&#39; </methodname> </classname>

时间:2015-01-16 21:57:14

标签: c++ netbeans methods mingw undefined-reference

我有一个Class(MethodClass.h&amp; MethodClass.cpp文件)和一个main.cpp

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

构造函数工作正常但是对于方法我得到错误: &#34; Test / main.cpp:13:未定义的对`MethodClass :: testMethod()&#39;&#39;&#34;

的引用

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

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 */

MethodClass.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;
}

main.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();

如果我重新这个,构造函数工作正常 - 结果: 构造函数:MethodClass 喂

  • 也很奇怪我甚至不必包括&#34; MethodClass.h&#34;在main.cpp ......

如果我同时转到第一行:// #include&#34; MethodClass.h&#34;,它仍然没问题,这是正常的还是你可以向我解释为什么会这样?

顺便说一句:我使用Netbeans 8.0.2和MinGW编译器

1 个答案:

答案 0 :(得分:3)

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

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

您需要正确确定.cpp文件中定义的所有函数的范围。 void testMethod()只是一个没有容器类的全局函数testMethod()。