为什么在尝试编译时会出现未定义引用错误?
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.
中使用它
刚刚遇到一个小问题,我还没有弄清楚。 我在另一个项目中使用了类似的程序结构,但问题归结为这个。我有两个 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.