重复的符号拱X86_64

时间:2014-12-31 09:57:26

标签: c++ arrays qt

我正在编写代码但是在构建时由于main.o和mtp_wrapper.o中的重复符号而确实存在问题。重复的符号是_file_extension_type。我用C ++和Qt编码

file_extension_type是mtp_wrapper.h中定义的struct数组,如下所示:typedef

struct {
    char *file_extension;
    LIBMTP_filetype_t file_type;
} MTP_file_extension;


MTP_file_extension file_extension_type [] = {
    {"wav", LIBMTP_FILETYPE_WAV},
    {"mp3", LIBMTP_FILETYPE_MP3},
    {"wma", LIBMTP_FILETYPE_WMA},
    {"ogg", LIBMTP_FILETYPE_OGG},
    {"mp4", LIBMTP_FILETYPE_MP4},
    {"wmv", LIBMTP_FILETYPE_WMV},
    {"avi", LIBMTP_FILETYPE_AVI},
    {"mpeg", LIBMTP_FILETYPE_MPEG}}

这是我们展示价值的唯一地方。

mtp_wrapper.cpp包含我的所有类定义,默认情况下包含mtp_wrapper.h

main.cpp还包括mtp_wrapper.h,但我需要它在main中实例化我的类,如下所示:

int main(int argc, char *argv[])
{

....

    // Detecting puls device
    //mtp_wrapper MyMtpPuls;
    mtp_wrapper *MyMtpPuls = new mtp_wrapper;
    error = MyMtpPuls->ConnectPulsDevice();

    ....

我想这是因为我在mtp_wrapper.cpp和main.cpp中包含了mtp_wrapper.h。

但是如果我尝试在公共类中添加数组的定义,例如:

Class xxx : yyy {

public:
    MTP_file_extension file_extension_type [];

问题消失但我无法使用函数sizeof。

在mtp_wrapper.cpp中我需要知道file_Extension_type中包含的number元素,最好的方法是将sizeof(file_extension_type)除以sizeof(MTP_file_extension)

但是一旦我声明类sizeof中的数组是不可用的。

任何想法???

我在复制目的中看到了很多主题,但它们都没有真正解决我的问题。

1 个答案:

答案 0 :(得分:1)

下面定义了一个struct的实例,然后尝试将该名称用作类型:

struct {
    char *file_extension;
    LIBMTP_filetype_t file_type;
} MTP_file_extension;

如果您打算将其作为某种类型,请将该名称放在struct之后。

struct MTP_file_extension {
    char *file_extension;
    LIBMTP_filetype_t file_type;
};