【问题标题】:Share object across members跨成员共享对象
【发布时间】:2015-02-17 21:28:09
【问题描述】:

我正在尝试使以下示例代码正常工作。我已经阅读了几个教程和问答,但我无法让它工作。我很可能缺乏对课程的理解,但我边做边学。希望我不会冒犯任何人:-)

我正在处理串口通信,我正在尝试使用这个库的回调版本: http://www.webalice.it/fede.tft/serial_port/serial_port.html

具体问题在注释代码中。

已更新 - 我想通了,下面的代码正在运行 :-)

这是 SerialPort.h 文件:

#include "AsyncSerial.h"

class SerialPort
public:
    void portOpen();
    void portWrite();
private:
    CallbackAsyncSerial serial;
};

还有 SerialPort.cpp:

#include "SerialPort.h"

void SerialPort::portOpen() {
// serial = CallbackAsyncSerial("COM1", 115200);  Doesn't work
serial.open("COM1", 115200);  //This works :-)
}

void SerialPort::portWrite() {
    serial.writeString("Hello\n");
}

void main() {
    SerialPort objt;
    objt.portOpen();
    objt.portWrite();
}

感谢您的帮助!

【问题讨论】:

    标签: c++ object members


    【解决方案1】:

    //How do I make the object "serial" accessible in the other members?

    使其成为成员变量本身

    class SerialPort
    public:
        void portSet();
        void portOpen();
        void portWrite();
    
    private:
        CallbackAsyncSerial serial;
    };
    

    void SerialPort::portOpen() {
        serial = CallbackAsyncSerial("COM1", 115200);
    }
    

    【讨论】:

    • @soje 你有没有尝试过我的提议?从linked docs 开始,CallbackAsyncSerial 提供了适当的默认构造函数,但我无法发现复制构造函数或赋值运算符。我不知道这应该如何工作。也许你一直在打一个蹩脚的教程。
    • 对不起!我错过了第二部分的变化。我已经将上面的代码更新为我现在正在尝试的代码,我收到了这个错误:..\asyncserial.h(181): error C2248: 'boost::noncopyable_::noncopyable::operator =' : cannot access在类 'boost::noncopyable_::noncopyable' 中声明的私有成员
    • 我需要最后一部分的变体。我已将问题中的代码更新为工作版本。感谢您的帮助,圣诞快乐 :-)
    • @soje “我需要最后一部分的变体。” 关于使用默认构造函数初始化该成员的可用性,我不确切知道。无论如何CallbackAsyncSerial 声称在它的参考文档中提供了一个。很高兴,你可以解决你的问题。圣诞快乐,节日快乐……
    【解决方案2】:

    为了让其他成员可以访问它,它应该是一个成员变量。这意味着在类 SerialPort 定义中声明它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      • 2018-07-24
      相关资源
      最近更新 更多