Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在主类c+中使用数据结构方法+;_C++ - Fatal编程技术网

C++ 在主类c+中使用数据结构方法+;

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

我试图在我的main方法中访问元素结构中的方法。我一直在说一个错误

“架构x86_64的未定义符号:

“Element::Element()”,引用自:

_主元素

_主音中的主音

ld:找不到架构x86_64的符号

叮当声:错误:链接器命令失败,退出代码为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;
}
#包括
#包括
#包括
#包括“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我看到了声明,但没有看到匹配的定义。