C++ 无法从 Class 调用 public 方法:未定义对“<ClassName>::<MethodName>”的引用
C++ can't call public Method from Class: undefined reference to '<ClassName>::<MethodName>'
我有一个 Class(MethodClass.h & MethodClass.cpp 文件)和一个 main.cpp
在 main 中,我调用了构造函数,然后调用了一个方法。
构造函数工作正常但是对于方法我得到错误:
"Test/main.cpp:13: undefined reference to `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 */
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();
如果我这样做,构造函数工作正常 - 结果:
构造函数:方法Class
你好
- 也很奇怪我什至不必在 main.cpp 中包含 "MethodClass.h"...
如果我也删除第一行://#include "MethodClass.h",它仍然没问题,这是正常的吗?或者你能向我解释为什么这样吗?
顺便说一句:我正在使用带有 MinGW 编译器的 Netbeans 8.0.2
将 testMethod 的实现更改为以下内容:
void MethodClass::testMethod(){
cout << "testMethod" << endl;
}
您需要正确限定 .cpp 文件中定义的所有函数的范围。 void testMethod() 只是一个没有容器 class 的全局函数 testMethod()。
我有一个 Class(MethodClass.h & MethodClass.cpp 文件)和一个 main.cpp
在 main 中,我调用了构造函数,然后调用了一个方法。
构造函数工作正常但是对于方法我得到错误: "Test/main.cpp:13: undefined reference to `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 */
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();
如果我这样做,构造函数工作正常 - 结果: 构造函数:方法Class 你好
- 也很奇怪我什至不必在 main.cpp 中包含 "MethodClass.h"...
如果我也删除第一行://#include "MethodClass.h",它仍然没问题,这是正常的吗?或者你能向我解释为什么这样吗?
顺便说一句:我正在使用带有 MinGW 编译器的 Netbeans 8.0.2
将 testMethod 的实现更改为以下内容:
void MethodClass::testMethod(){
cout << "testMethod" << endl;
}
您需要正确限定 .cpp 文件中定义的所有函数的范围。 void testMethod() 只是一个没有容器 class 的全局函数 testMethod()。