错误 C2248 在 stackoverflow 上并不新鲜。不幸的是,我是使用 Boost 库的初学者,我无法修复代码中的错误:
// .h file
using namespace boost::interprocess;
using namespace std;
class CMsqQueueMngr {
public:
// constructors & destructors
CMsqQueueMngr();
~CMsqQueueMngr();
int Open(char *queueName, int mode);
int Close();
int Read(uint8_t *data, int count);
int Write(uint8_t *data, int count, int priority);
boost::interprocess::message_queue mq;
private:
std::string mqName;
};
// .cpp file
CMsqQueueMngr::CMsqQueueMngr()
{} **<=== ERROR C2248**
CMsqQueueMngr::~CMsqQueueMngr()
{}
int CMsqQueueMngr::Open(char *queueName, int mode)
{
try{
//Erase previous message queue
message_queue::remove(queueName);
mqName.assign(queueName);
//Create a message_queue.
mq
(create_only //only create
, queueName //name
, 100 //max message number
, sizeof(int) //max message size
); **<=== ERROR C2064 **
//Send 100 numbers
for (uint8_t i = 0; i < 100; ++i){
mq.send(&i, sizeof(i), 0);
}
}
catch (interprocess_exception &ex){
std::cout << ex.what() << std::endl;
return -1;
}
return 0;
}
编译器错误:
错误 C2248:'boost::interprocess::message_queue_t>::message_queue_t':无法访问在类'boost::interprocess::message_queue_t> 中声明的私有(private)成员
错误 C2064:术语不计算为采用 4 个参数的函数
如何使变量 MQ 无障碍?
最佳答案
您必须创建 message queue对象 mq
在你包含类的构造函数中,
CMsqQueueMngr::CMsqQueueMngr():
mq(create_only, "my_first_queue_name", 100, sizeof(int))
{
}
你必须使用 initalizer list , 因为有 无法访问 default constructor 用于消息队列对象(如
mq
)。这是在构造函数的右大括号之后编译器消息 C2248 的含义。顺便说一句:在普通方法中永远不能初始化成员,这是编译器在您的
Open
中发现的错误(因此是 C2064)。方法。其中还有一些其他错误(或误解,或开放式结尾),而对 mq.send
的调用将按预期工作(至少一次)。[更新]
或者 ,您可以使用堆栈上的变量访问 boost 的消息队列:
/// abbreviate name boost::interprocess::message_queue
using boost::interprocess::message_queue;
class CMsqQueueMngr {
public:
CMsqQueueMngr(const std::string& queue_name);
void WriteInt(int data);
// (some methods omitted)
private:
/// name of the queue
std::string mqName;
};
CMsqQueueMngr::CMsqQueueMngr(const std::string& name):
mqName(name)
{
}
void CMsqQueueMngr::WriteInt(const int data)
{
// create a queue for max 100 values at first call, open if existing
message_queue mq(open_or_create, mqName.c_str(), 100, sizeof (data));
mq.send(&data, sizeof(data), 0);
}
...我没有尝试过,但如果不可能,the static
remove
method没有多大意义。
关于c++ - 再次出现错误 C2248,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28276314/