重新定义一个类

时间:2014-11-26 09:56:11

标签: c++ qt constructor

我在头文件中定义了以下类:

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%的例子中,我看到有人使用这个,似乎在他们的案例中工作

5 个答案:

答案 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>
} 

编译器正在哭泣