为什么在尝试编译时会出现未定义引用错误?

Why do I get an Undefined reference error when trying to compile?

刚刚遇到一个小问题,我还没有弄清楚。 我在另一个项目中使用了类似的程序结构,但问题归结为这个。我有两个 cpp 文件,它们是:

Trading_dte.cpp :

#include <iostream>
using namespace std;
class Dte
{
    public:
    int addition(int a, int b)
    {
        return a + b;
    }
};

dummy.cpp :

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

Dte obj;

int check()
{
    std::cout<<obj.addition(6,9);
}

我创建了一个名为 Trading_dte.hpp 的头文件:

# pragma once
#include <iostream>

class Dte
{
    public:
    int addition(int a, int b);
}; 

现在,当我尝试使用以下命令进行编译时:

g++ Trading_dte.cpp dummy.cpp

我收到错误:

/usr/bin/ld: /tmp/ccCcM8R6.o: in function `check':
dummy.cpp:(.text+0x1a): undefined reference to `Dte::addition(int, int)'
collect2: error: ld returned 1 exit status

我确定它很小,但我不知道是什么。 非常感谢!

你的cpp文件需要改写

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

int Dte::addition(int a, int b)
{
  return a + b;
}

您创建了两个单独的 Dte class,一个对 main 可见,另一个仅在 Trading_dte.cpp 中可见。 main 可见的,定义在 Trading_dte.hpp 中,有 addition 成员函数的声明,但没有定义。

可能最简单的做法是删除 Trading_dte.cpp 并将实现放入 Trading_dte.hpp 中的 class 定义。

Trading_dte.hpp:

# pragma once

class Dte
{
    public:
    int addition(int a, int b)
    {
        return a + b;
    }
};

请注意,我还删除了 #include <iostream> 行。您不需要在头文件中使用它,因为您不在 class.

中使用它