错误消息"Undefined reference error to" C++
Error message "Undefined reference error to" in C++
我正在获得C++中一个类方法的未定义引用。错误是"未定义对'部门::getNameabi:cxx11'的引用,以及部门每个方法调用的其他许多行。
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <vector>
#include "department.h"
using namespace std;
void addDepartment();
void writeToFile();
void showArt();
void removeDepartment();
vector <Department> departments;
int main()
{
int choice;
do
{
cout << "1)Add asset t 2)Remove Asset t 3)Departmental Options t 4)Quit" << endl;
cin >> choice;
switch(choice)
{
case 1: addDepartment();
break;
case 2: removeDepartment();
break;
case 3: //showReport();
break;
}
addDepartment();
} while(choice != 4);
}
void showArt()
{
cout << "ASSET MANGEMENT" << endl;
}
void addDepartment()
{
string name;
cout << "Enter department name" << endl;
cin >> name;
vector<Department>::iterator it;
int flag = 0;
for(it = departments.begin(); it!=departments.end(); it++)
{
if (it->getName().compare(name) == 0)
{
flag = 1;
it->addAsset();
break;
}
}
if (flag == 0)
{
Department temp(name);
temp.addAsset();
departments.push_back(temp);
}
}
void removeDepartment()
{
string name;
cout << "Enter department name" << endl;
cin >> name;
vector<Department>::iterator it;
int flag = 0;
for(it = departments.begin(); it!=departments.end(); it++)
{
if (it->getName().compare(name) == 0)
{
flag = 1;
it->removeAsset();
break;
}
}
if (flag == 0)
{
cout << "No such department puta!" << endl;
}
}
我部门的头文件如下:
#ifndef DEPARTMENT_H
#define DEPARTMENT_H
#endif
#include <cstring>
#include <vector>
#include <string>
#include "computer.h"
#include "software.h"
using namespace std;
class Department
{
string name;
vector<Computer> computers;
vector<Software> softwares;
void addComputer();
void addSoftware();
public:
Department(string);
void addAsset();
void removeAsset();
string getName();
};
错误
bipgen@genbox:~/asset-management$ g++ -std=c++11 main.cpp
/tmp/ccvu6doW.o: In function `addDepartment()':
main.cpp:(.text+0x181): undefined reference to `Department::getName[abi:cxx11]()'
main.cpp:(.text+0x1cd): undefined reference to `Department::addAsset()'
main.cpp:(.text+0x220): undefined reference to `Department::Department(std::__cxx11::basic_string<char, std::char_traits<char>, std::a
llocator<char> >)'
main.cpp:(.text+0x23b): undefined reference to `Department::addAsset()'
/tmp/ccvu6doW.o: In function `removeDepartment()':
main.cpp:(.text+0x392): undefined reference to `Department::getName[abi:cxx11]()'
main.cpp:(.text+0x3d8): undefined reference to `Department::removeAsset()'
collect2: error: ld returned 1 exit status
Department
的所有成员函数都只声明,没有定义。
这意味着编译器承认它们的存在并编译main.cpp
,在调用它们的地方,没有任何麻烦。
当编译器完成其工作时,轮到链接器将函数的实现"粘合"到它们的调用中。但它找不到实现,所以它理所当然地抱怨。
现在,我想你不只是声明了成员函数而忘记定义它们。您很可能将定义放在一个名为department.cpp
的单独文件中,如下所示:
#include "department.h"
void Department::addSoftware() {
// implementation
}
Department::Department(string) {
// implementation
}
void Department::addAsset() {
// implementation
}
void Department::removeAsset() {
// implementation
}
string Department::getName() {
// implementation
}
您可能还认为,main.cpp
包含department.h
会以某种方式神奇地从department.cpp
中提取代码。
但这不是C++(或典型的C++工具链)的工作方式。链接器不知道源自其他文件中源代码的任何实现,除非您告诉它。事实上,在您的情况下,即使是编译器也不知道它们。
需要编译department.cpp
并将生成的二进制代码传递给链接器。这样做的快速方法是:
g++ -std=c++11 main.cpp department.cpp
迟早,你会需要一个更复杂的过程,其中每个*.cpp
文件被编译成一个*.o
文件,然后将*.o
文件传递给链接器,所有这些都发生在一个 Makefile 中。
部门类实现是否包含在编译中?
g++ -std=c++11 main.cpp department.cpp
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- Python str to C++ to Python str
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- "no matching function for call to 'Vector::Vector'"错误
- vector<vector<double>> to mxArray using memcpy
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- 当覆盖存在时调用基本虚拟"binded to object"函数
- OpenGL VBO Indexing ( How to compute Index Array)
- 为什么我会" void value not ignored as it ought to be"?
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")