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

时间:2017-02-22 02:49:37

标签: c++

我正在尝试在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;
}

3 个答案:

答案 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() {
}