重复符号拱门X86_64

duplicate symbol arch X86_64

本文关键字:X86 符号      更新时间:2023-10-16

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

file_extension_type是在 mtp_wrapper.h 中定义的结构数组,如下所示: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和主要.cpp中包含 mtp_wrapper.h。

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

Class xxx : yyy {
public:
    MTP_file_extension file_extension_type [];

问题消失了,但我无法使用函数大小。

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

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

任何想法???

我已经在重复的目的中看到了许多主题,但没有一个真正解决了我的问题。

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

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;
};