使用Test程序的共享库中的静态私有字段访问类

时间:2017-12-28 09:28:04

标签: c++

我遇到了 c ++ 。我从事超过15年的Java,但 c ++ 只有几周。因此, c ++ Java 的影响,毫无疑问!但是,随着 c ++ 17 也走向这个方向,它可能并非完全错误。这是我的情况:我需要一个包含名为MyListener的类的共享库,抽象为:

    class MyListener {
      private:
        static int field1;
        static struct field2;
      public:
        ~MyListener() {
         // do whatever!
        }
       //constructor
       MyListener() {
         field1 = 10;
         field2.name = “Hello”;
         field2.addr=”Dolly”;
       }
       Vector<char> getMessage() {
          Open socket using initialized static fields;
          return socket.message;
       }
    };

我需要一个Test类来使用共享库,让我们说MyListenerTest.cpp包含如下内容:

    int main() {
       MyListener * ml = new MyListener();
       while(true){
         std::vector<char> data = ml->getMessage();
       }
       delete ml;
    }

问题:

  • 可以编译类MyListener和类似的共享库 libMyListener.so已创建。

为了编译Test类,我定义了类似

的东西
    g++ -std=c++14 -LpathtoMyListener –lMyListener -etc

但是 MyListenerTest.cpp 中无法看到 MyListener 类如何告诉 MyListenerTest 在哪里查找? 当然,首先我在头文件中声明了该类,并将该文件包含在测试程序中,因此可以看到该类。但要么我得到一个定义的两次错误,或者如果我只在标题中声明该类,我得到一个错误w.r.t私有字段不可见。当然我也尝试使用setter和getter,因为它在 Java 中很常见。但这给了一个可怕的解决方案!

  • 如何使用 c ++
  • 以干净的方式处理案例

最后,应从 Java JNI 访问共享库。现在我坚持使用 c ++ 进行测试。 使用Debian9和Eclipse Oxigene。

1 个答案:

答案 0 :(得分:0)

知道了!答案是不要使用&#34;静态&#34;类字段的修饰符。这样做我得到了我想要的东西。通过构造函数初始化套接字数据的私有字段以及使用私有字段内的套接字初始化通过套接字读取或写入消息的方法。现在,我们必须确保只有一个类对象的副本。但由于它是嵌入式系统,因此这很容易。是的,在Java中,我经常使用静态方法的静态类来创建特殊类型而不创建对象。也许可以使用c ++,我只是不知道。