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

标签 c++

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

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/

相关文章:

c++ - 在从基类构造函数创建的单独线程中调用纯虚函数

c++ - 有没有办法将 cpp 11 中的别名 std::make_pair 函数键入到 abc::make_pair?

c++ - 模板可变函数 : arbitrary number of classes with arbitrary number of constructor parameters

c++ - 使用 C11 样式 for 循环删除 vector 元素时出错

c++ - 在 C++ 中创建密码

c++ - 如何设计可反弹的大对象的类依赖?

c++ - 了解 C++ 模板错误

c++ - 此迭代代码中发生了什么?

c++ - 如何获得比较两个 vector 对的子集?

c++ - 在 C++ 中获取数据库连接