【发布时间】:2015-04-01 07:33:29
【问题描述】:
错误 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 中声明的私有成员>
错误 C2064:术语不计算为采用 4 个参数的函数
如何使变量 mq 可访问?
【问题讨论】:
-
除非您真的想得到一些更令人困惑的错误,否则我建议您从标题中删除
using namespace语句。 -
您应该仔细查看构造函数和初始化列表,以了解编译器在说什么。我试着用我的answer 来关注这个。
-
...不是变量 mq 不可访问。
-
@pmr:在头文件中声明了类 CMsqQueueMngr。如果我删除“using namespace boost::interprocess”语句,编译器会指示错误:“error C2065: 'create_only': identificatore non dichiarato”
-
@cris1967 是的,您必须限定此标识符。
boost::interprocess::create_only
标签: c++ boost compiler-errors message-queue boost-interprocess