我正在编写代码但是在构建时由于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中的数组是不可用的。
任何想法???
我在复制目的中看到了很多主题,但它们都没有真正解决我的问题。
答案 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;
};