c++ - C++ 控制台应用程序未在 macOS 上的 Xcode 9.3 中编译
问题描述
我正在使用 Xcode(9.3)在 Mac 上开发 C++ 控制台(命令行)应用程序。它正在编译并运行良好,但后来我做了一些代码更改,之后它显示了一些奇怪的编译时错误。像“/clang:-1: 链接器命令失败,退出代码为 1(使用 -v 查看调用)”。
Undefined symbols for architecture x86_64:
"LJCPPBL_CORE::LJCPPBL::Initialize(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
_main in main.o
"LJCPPBL_CORE::LJCPPBL::GetShortestPath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, float*)", referenced from:
_main in main.o
"LJCPPBL_CORE::LJCPPBL::GetJson()", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
上面的文字显示在日志中。分析日志后,我知道它的“LJCPPBL”类的显示方法没有定义,但我已经正确定义了方法,头文件和cpp文件都包含在项目中。请帮我。
这是 LJCPPBL 头文件“LJCPPBL.hpp”
#ifndef LJCPPBL_hpp
#define LJCPPBL_hpp
#include <iostream>
#include "../Models/Models.hpp"
#include <list>
#include <string.h>
using namespace std;
using namespace LJCPPBL_Models;
namespace LJCPPBL_CORE {
class LJCPPBL
{
public: static void Initialize(string clientAPIKEY);
public: static string GetJson();
public: static void SetJson(string strJson);
public: static list<Destination> GetDestinationsList();
public: static list<Point> GetShortestPath(string source, string destination, float* costOfPath);
};
}
#endif /* LJCPPBL_hpp */
这是LJCPPBL头文件“LJCPPBL.cpp”的实现
#include <iostream>
#include "LJCPPBL.hpp"
#include "../Models/Models.hpp"
#include "../DAL/DataAccess.cpp"
#include "../Plugins/JsonParser/json.hpp"
#include "SPC.cpp"
#include "GlobalValues.cpp"
#include <list>
using namespace std;
using namespace LJCPPBL_CORE;
using namespace LJCPPBL_DAL;
namespace LJCPPBL_CORE{
void LJCPPBL::Initialize(string clientAPIKEY){
auto globalValues = new GlobalValues();
LJCPPBLGlobalValues = *globalValues;
LJCPPBLGlobalValues.ClientAPIKey = clientAPIKEY;
}
string LJCPPBL::GetJson()
{
LJCPPBLAPIDAL* objDAL = new LJCPPBLAPIDAL();
string mapPointsAndPathJson = objDAL -> GetMapsAndPointsJSON();
string mapDestinationJSON = objDAL -> GetMapDestinationsJSON();
json jsonObj = {{"MapPointsAndPathJSON", mapPointsAndPathJson}, {"MapDestinationJSON", mapDestinationJSON} };
return jsonObj.dump();
}
void LJCPPBL::SetJson(string strJson)
{
}
list<Destination> LJCPPBL::GetDestinationsList()
{
LJCPPBLAPIDAL* objDAL = new LJCPPBLAPIDAL();
return objDAL -> GetDestinations();
}
list<Point> LJCPPBL::GetShortestPath(string source, string destination, float* costOfPath)
{
return SPC::GetShortestPath(source, destination, costOfPath);
}
}
//#endif
这是我的 main.cpp 文件
#include <iostream>
#include "Models/Models.hpp"
#include "Core/LJCPPBL.hpp"
using namespace std;
using namespace LJCPPBL_Models;
using namespace LJCPPBL_CORE;
int main(int argc, const char * argv[]) {
//Destination* ds = new Destination();
LJCPPBL::Initialize("APiKEY");
string jsonstring = LJCPPBL::GetJson();
string source = "SourceQuickLink";
string destination = "DestinationQuickLink";
float pathCost = -2;
auto lstShortestPath = LJCPPBL::GetShortestPath(source, destination, &pathCost);
if(lstShortestPath.size() == 1){
cout << "\n No Path Exists From " << source << " To " << destination << "\n\n";
}
else{
cout << "\nShortest Path From " << source << " To " << destination << " Is:\n\n";
for (Point & point : lstShortestPath)
{
cout << point.Identifier << " (" << point.X << ", " << point.Y << ") ";
if(point.Identifier != destination)
cout << " -> ";
else
cout << "\n\nPath Cost Is: " << pathCost;
}
cout << "\n\nPath Cost Is: " << pathCost;
}
return 0;
}
解决方案
推荐阅读
- c++ - 如何将类成员设置为默认值?
- javascript - 从 Vue 访问 data() 对象
- sql - SQL Count with Joins 返回重复项
- reactjs - React Typescript 泛型 - 类型“未知”不可分配给类型“数字”
- android - 无法安装 SSL pem 证书 android 10
- ios - 如何获取 UIDocumentPickerViewController 返回的 URL 的显示文件夹名称和 App 图标?
- java - Spring Cloud Stream 与 RabbitMQ 的连接
- python - 使用 pyspark 与 pandas 进行数据加载的时间比较
- javascript - 视频流的像素化和模糊播放
- sql - 检索每本书的总章节