我在头文件中定义了以下类:
class mtp_wrapper
{
private:
LIBMTP_raw_device_t * usbrawdevice;
int numusbrawdevice;
LIBMTP_error_number_t err;
LIBMTP_mtpdevice_t *dev;
public:
mtp_wrapper() {
dev = NULL;
};
void setDevice(LIBMTP_mtpdevice_t *dev);
LIBMTP_mtpdevice_t *getDevice();
};
并且在c ++部分中是:
mtp_wrapper::mtp_wrapper()
{
.... <some code>
}
void mtp_wrapper::setDevice(LIBMTP_mtpdevice_t *dev) {
this->dev = dev;
}
LIBMTP_mtpdevice_t * mtp_wrapper::getDevice() {
return dev;
}
顺便说一句,在构建时我遇到了一个问题,说mtp_wrapper已经定义了,但我需要确保dev变量初始化为NULL。
在99%的例子中,我看到有人使用这个,似乎在他们的案例中工作
答案 0 :(得分:2)
在.h文件中试试
class mtp_wrapper
{
private:
LIBMTP_raw_device_t * usbrawdevice;
int numusbrawdevice;
LIBMTP_error_number_t err;
LIBMTP_mtpdevice_t *dev;
public:
mtp_wrapper();
void setDevice(LIBMTP_mtpdevice_t *dev);
LIBMTP_mtpdevice_t *getDevice();
};
,这在cpp
中mtp_wrapper::mtp_wrapper() : dev(NULL)
{
.... <some code>
}
void mtp_wrapper::setDevice(LIBMTP_mtpdevice_t *dev) {
this->dev = dev;
}
LIBMTP_mtpdevice_t * mtp_wrapper::getDevice() {
return dev;
}
你已经定义了两次构造函数,一次在头文件中,一次在cpp中。但是,如果要确保def变量为NULL,请输入:dev(NULL)
希望它有效!
答案 1 :(得分:1)
问题是您定义了mtp_wrapper()构造函数两次:一次在头文件中,第二次在cpp文件中。只需合并两个实现并写入.cpp文件:
mtp_wrapper::mtp_wrapper()
{
dev = NULL;
.... <some code>
}
答案 2 :(得分:0)
mtp_wrapper()在头文件中定义,您尝试在实现文件(.cpp)文件中定义它。 快速修复:在标题中将mtp_wrapper()声明为mtp_wrapper();
答案 3 :(得分:0)
您收到错误消息,因为您在此处定义了默认构造函数:
mtp_wrapper() {
dev = NULL;
};
再来一次:
mtp_wrapper::mtp_wrapper()
{
.... <some code>
}
答案 4 :(得分:0)
这是.h文件中的第一个定义
mtp_wrapper() {
dev = NULL;
};
以下是.cpp文件中的第二个定义: -
mtp_wrapper::mtp_wrapper()
{
.... <some code>
}
编译器正在哭泣