gpt4 book ai didi

使用共享库时未在此范围内声明 C++ [类]

转载 作者:行者123 更新时间:2023-11-28 06:45:01 25 4
gpt4 key购买 nike

我创建了一个共享库项目,它使用我编写的几个不同的类来做各种事情。所以我的问题更清楚了,请注意下面的头文件:

TsmClient.h

#include "Headers/Framework/BoostSocket.h"
#include "DataContracts.h"

#ifndef TSMCLIENT_H_
#define TSMCLIENT_H_

using namespace boost;
using namespace boost::asio;

class TsmClient {
public:
TsmClient();
TsmClient(std::string host);
virtual ~TsmClient();

bool IsConnected();

friend class WarehouseFramework;

private:
std::string Communicate(std::string &req);

std::string serverHost;
int port;
std::shared_ptr<BoostSocket> socket;
io_service service;

void Connect();
void Close();
};

就其本身而言,这个项目构建得很好并生成一个 .so 文件。但是,当我尝试在另一个项目中使用该库时,我在访问我在 DataContracts.h 中编写的类时遇到问题。确切的错误是:

WarehouseSettingTemplateList’ was not declared in this scope

我一整天都能够创建 TsmClient 的实例并成功调用函数,并且由于 TsmClient.h 包含 DataContracts.h,我有点困惑为什么我不能使用在中声明的类数据契约(Contract).h。这是否与我将此项目编译为共享库这一事实有关?

这里是DataContracts.h

    #include "Headers/Framework/Proto/TcpFramework.pb.h"
#include "Headers/Framework/Proto/ProductManagement.pb.h"
#include "Headers/Framework/Proto/KioskManagement.pb.h"
#include "Headers/Framework/Proto/WarehouseManagement.pb.h"
#include "Headers/Framework/Proto/CashTillManagement.pb.h"
#include "Headers/Framework/Proto/AccountManagement.pb.h"
#include "Headers/Framework/Proto/VendorManagement.pb.h"
#include "Headers/Framework/Proto/ShoppingCartManagement.pb.h"
#include "Headers/Framework/Proto/Generic.pb.h"
#include "Headers/Framework/Proto/OfflineManagement.pb.h"
#include "Headers/Framework/Proto/CouponManagement.pb.h"
#include "Headers/Utils/Utilities.h"

using namespace StokedProtoBuf;

#ifndef DATACONTRACTS_H_
#define DATACONTRACTS_H_

class WarehouseSettingTemplate {
public:
long idWarehouse;
int idWarehouseSettingType;
std::string Value;
bool IsEnabled;

std::string Serialize();
void Deserialize(const std::string &data);
private:
WarehouseSettingTemplate_Proto proto;
};

class WarehouseSettingTemplateList {
public:
std::vector<WarehouseSettingTemplate> settingList;
std::string Serialize();
void Deserialize(const std::string &data);
private:
WarehouseSettingTemplateList_Proto proto;
};

我敢肯定这是我的一个愚蠢疏忽,但它让我发疯。

最佳答案

在收到所有帮助后我不想回答我自己的问题,但这就是问题所在......

我的共享库中有一个名为 DataContracts.h 的头文件。在我的主项目中,我还有一个名为 DataContracts.h 的头文件

所以我认为我的 include 守卫阻止共享库头文件被导入。这是我之前第一次真正使用共享库,所以我希望这能对遇到此问题的其他人有所帮助。

--我感觉很糟糕,因为我没有提供足够的信息让其他人回答这个问题。

关于使用共享库时未在此范围内声明 C++ [类],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25168226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com