为什么会出现未定义的参考错误?

时间:2020-04-30 22:43:59

标签: c++

我收到未定义的参考错误。你能找出原因吗?

错误:

  • undefined reference to Breuken::Breuken(int, int)
  • undefined reference to Breuken::som()

(我是c ++编程的新手。我目前正在使用一个头文件,另一个源文件和主源文件来开发项目。)

这是我的代码:

头文件(Breuk.H):

using namespace std;
class Breuken{
    Breuken(int, int);
    void som();

    void setTeller1(int);
    void setNoemer1(int);
    int getTeller1();
    int getNoemer1();

private:

    int teller1;
    int noemer1;
};

源文件(Breuk.cpp):

#include <iostream>
#include "Breuk.h"

using namespace std;

Breuken::Breuken(int tel1, int noem1)
{
    setTeller1(tel1);
    setNoemer1(noem1);
}

int Breuken::getTeller1()
{
    return teller1;
}
int Breuken::getNoemer1()
{
    return noemer1;
}

void Breuken::setTeller1(int tel1)
{
    teller1 = tel1;
}
void Breuken::setNoemer1(int noem1)
{
    noemer1 = noem1;
}
int Breuken::som()
{
    cout<<"Breuken zijn: "<<getTeller1()<<" / "<<getNoemer1()<<endl;
}

主文件(main.cpp):

#include <iostream>
#include "Breuk.h"

using namespace std;

int main()
{
    Breuken br(1, 2);
    br.som();
    return 1;
}

1 个答案:

答案 0 :(得分:-1)

如果我做对了,您想使用一个类,但是您所做的唯一一件事就是声明一些函数而没有实际定义它们。

您需要做的是将所有内容放在此类的标题中:


class Breuk {
private:
    int teller1;
    int noemer1;

public:
    Breuk(int tel1, int noem1);

    void som();

    void setTeller1(int tel1);
    void setNoemer1(int noem1);

    int getTeller1();
    int getNoemer1();
};

此外,不要忘记给函数头中的变量起一个名字!

您需要获取对类的引用(。::之前的部分)的.cpp文件。它必须与您的班级同名。另外,在构造函数中使用setter也不太好。最好直接引用成员变量(类中的变量)。为此,您需要使用“ this-> variable”。 “ this”将引用您所在的当前类。这意味着,如果您编写this-> teller1,它将引用该类内部的teller1变量。

#include <iostream>
#include "Breuk.hpp"

using namespace std;

Breuk::Breuk(int tel1, int noem1)
{
    // setTeller1(tel1);   theoreticly ok but its better to access
    // setNoemer1(noem1);  member variables (variables inside a class) directly

    this->teller1 = tel1;
    this->noemer1 = noem1;
}

int Breuk::getTeller1()
{
    return teller1;
}
int Breuk::getNoemer1()
{
    return noemer1;
}

void Breuk::setTeller1(int tel1)
{
    teller1 = tel1;
}
void Breuk::setNoemer1(int noem1)
{
    noemer1 = noem1;
}
void Breuk::som()
{
    cout << "Breuken zijn: " << getTeller1() << " / " << getNoemer1() << endl;
}

在main.cpp中,您只犯了一个小错误,即返回0和类的名称。


#include "Breuk.hpp"

using namespace std;

int main()
{
    Breuk br(1, 2); // make sure u use the same name your class has

    br.som();

    return 0; // return 0 at the end: it means that the program executed correctly
              // return 1 would mean that an error occured
}

此外,我建议使用.hpp文件而不是.h文件。并没有真正的区别,但是在c ++中使用.hpp更为常见。