c++ - C++ 头文件为架构 x86_64 错误生成未定义符号
问题描述
当我将它们放在文件中时,这些函数都可以正常工作main.cpp
,但是我现在已经将它们移到了头文件中。
这是我的general_functions.cpp
:
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
#include "general_functions.hpp"
using namespace std;
bool check_if_room_exists(int room_number){
string room_number_full = to_string(room_number) + ".txt";
ifstream new_file;
new_file.open(room_number_full);
if(new_file.is_open()){
return true;
}else{
return false;
}
}
int get_new_room_number(){
int room_number;
cout<<"What room number do you want this room to have?"<<endl;
cout<<"Enter your choice: ";
cin>>room_number;
while(!room_number || check_if_room_exists(room_number) == true){
// Taken from StackOverflow to avoid endless loop: https://stackoverflow.com/questions/19521320/why-do-i-get-an-infinite-loop-if-i-enter-a-letter-rather-than-a-number
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
// End of code taken from StackOverflow
if(check_if_room_exists(room_number) == true){
cout<<"A room with that number already exists.\nEnter your new choice: ";
}else{
cout<<"Please ensure you enter only numeric values for the room number.\nEnter your new choice: ";
}
cin>>room_number;
}
return room_number;
};
int get_cost_per_night(){
int cost;
cout<<"Please enter the cost per night for this room: ";
cin >> cost;
while(!cost || cost < 1){
// Taken from StackOverflow to avoid endless loop: https://stackoverflow.com/questions/19521320/why-do-i-get-an-infinite-loop-if-i-enter-a-letter-rather-than-a-number
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
// End of code taken from StackOverflow
if(!cost){
cout<<"Please ensure you enter only numeric values for the cost per night.\nEnter your new choice: ";
}else{
cout<<"The price is less than £0. Please enter a value above £0: ";
}
cin>>cost;
}
return cost;
}
int get_room_number(){
int room_number;
cout<<"Please enter the room number you wish to view: ";
cin >> room_number;
while(check_if_room_exists(room_number) == false){
// Taken from StackOverflow to avoid endless loop: https://stackoverflow.com/questions/19521320/why-do-i-get-an-infinite-loop-if-i-enter-a-letter-rather-than-a-number
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
// End of code taken from StackOverflow
if(check_if_room_exists(room_number) == false){
cout<<"That room doesn't exist enter a new one: ";
}
cin>>room_number;
}
return room_number;
}
void delete_room(int room_number){
remove((to_string(room_number) + ".txt").c_str());
}
这是general_functions.hpp
文件:
#ifndef general_functions_hpp
#define general_functions_hpp
#include <stdio.h>
using namespace std;
bool check_if_room_exists(int);
int get_new_room_number();
int get_cost_per_night();
int get_room_number();
void delete_room(int);
#endif
最后,这就是我将头文件导入main.cpp
文件的方式:
#include "general_functions.hpp"
这会导致出现以下错误:
Undefined symbols for architecture x86_64:
"delete_room(int)", referenced from:
single_room_manager(SingleRoom) in main-f8f1e8.o
"get_room_number()", referenced from:
_main in main-f8f1e8.o
"get_cost_per_night()", referenced from:
single_room_manager(SingleRoom) in main-f8f1e8.o
create_single_room() in main-f8f1e8.o
"get_new_room_number()", referenced from:
single_room_manager(SingleRoom) in main-f8f1e8.o
create_single_room() in main-f8f1e8.o
"login()", referenced from:
_main in main-f8f1e8.o
ld: symbol(s) not found for architecture x86_64
从我所做的研究来看,我认为这是由于函数的定义与它们的实际情况不匹配造成的,但是据我所见,它们匹配并且不应该引起任何问题。
帮助将不胜感激!
谢谢
解决方案
推荐阅读
- c# - 任何人都可以知道如何处理(错误 CS1525:意外符号)
- python - 如何在 python 中使用 woo commerce rest api 在不替换现有产品的情况下添加其他产品图像
- javascript - 在使用 React 渲染之前初始化数据
- laravel - Laravel 7强制用户输入密码
- android - SDK >=26 仍需要 mipmap/ic_launcher.png?
- openstack - 未能在 openstack-neutron 中绑定端口
- python - python中的匹配数据类型
- dns - 是否可以“伪造”名称服务器?
- slim - 如何在 Slim4 中为路由定义设置属性并在中间件中使用它
- laravel - 无法通过 vue 和 laravel 更新表中的布尔值