C++ 在主类c+中使用数据结构方法+;
我试图在我的main方法中访问元素结构中的方法。我一直在说一个错误 “架构x86_64的未定义符号: “Element::Element()”,引用自: _主元素 _主音中的主音 ld:找不到架构x86_64的符号 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看 调用“ 元素标题C++ 在主类c+中使用数据结构方法+;,c++,C++,我试图在我的main方法中访问元素结构中的方法。我一直在说一个错误 “架构x86_64的未定义符号: “Element::Element()”,引用自: _主元素 _主音中的主音 ld:找不到架构x86_64的符号 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看 调用“ 元素标题 #ifndef Element_hpp #define Element_hpp struct Element { public: int getNumber(void); void setN
#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;
}
#包括
#包括
#包括
#包括“Element.hpp”
int main(int argc,const char*argv[]{
流数据的std::;
data.open(“data.txt”);
int end=1000;
元素*e=新元素[结束];
for(int i=0;i
您不应该包含CPP文件。相反,你应该链接它们。最直接的方法是从命令行:
$ g++ main.cpp element.cpp
<>我建议您阅读C++编译过程,包括编译和链接之间的区别。
Element::Element()
在元素头文件上,但未定义它。添加
Element::Element() {
}
添加到元素类文件应该允许链接器查找缺少的符号。您已声明
Element()元素头文件中的代码>构造函数,但您尚未在任何文件中定义它
您可能希望将其添加到元素实现文件中:
Element::Element() {
}
这太明显了。您声明了类的构造函数,但未能定义该类的构造函数。你到底不明白什么?你如何编译和链接你的代码?您使用的是命令行还是IDE?您是否在使用make之类的生成?虽然这是真的,但它并不能回答问题,而且与链接失败无关。@SamVarshavchik我看到了声明,但没有看到匹配的定义。