我正在尝试在main方法中访问Element结构中的方法。我一直收到错误说明
“架构x86_64的未定义符号:
“Element :: Element()”,引自:
Element.o中的_main
_main in main.o
ld:找不到架构x86_64的符号
clang:错误:链接器命令失败,退出代码为1(使用-v查看 调用)“
元素标题
#ifndef Element_hpp
#define Element_hpp
struct Element {
public:
int getNumber(void);
void setNumber(int n);
int getSteps();
void setSteps();
Element();
private:
int number;
int stepN;
};
#endif /* Element_hpp */
元素类
#include "Element.hpp"
#include "main.cpp"
int Element::getNumber() {
return number;
}
void Element::setNumber(int n) {
number = n;
setSteps();
}
int Element::getSteps() {
return stepN;
}
int steps(int n) {
int i = 0;
int j = n;
while(j != 1) {
if(j % 2 == 1) {
j = (3 * j + 1) / 2;
i = i + 2;
}
else if(j % 2 == 0) {
j= j / 2;
i= i + 1;
}
}
return i;
}
void Element::setSteps() {
stepN = steps(number);
}
主要课程
#include <iostream>
#include <String>
#include <fstream>
#include "Element.hpp"
int main(int argc, const char * argv[]) {
std::ofstream data;
data.open("data.txt");
int end = 1000;
Element* e = new Element[end];
for(int i = 0; i < end; i++) {
e[i].setNumber(i);
e[i].setSteps();
}
heapSort(e, end);
printArray(e, end);
data.close();
return 0;
}
答案 0 :(得分:1)
你永远不应该#include CPP文件。相反,你应该链接他们。最直接的方法是从命令行:
$ g++ main.cpp element.cpp
我建议您阅读有关C ++构建过程的内容,包括编译和链接之间的区别。
答案 1 :(得分:1)
在评论中提到的Sam Varshavchik,您声明了
Element::Element()
元素头文件上的但未定义它。添加
Element::Element() {
}
到您的Element类文件应该允许链接器找到缺少的符号。
答案 2 :(得分:1)
您已在Element头文件中声明Element();
构造函数,但尚未在任何文件中定义它。
您可能希望在Element实现文件中添加它:
Element::Element() {
}