【问题标题】:warning LNK4006: "unsigned char * XXX" (?XXX@@3PAEA) already defined in WWWWW.o; second definition ignored警告 LNK4006: "unsigned char * XXX" (?XXX@@3PAEA) 已在 WWWWW.o 中定义;第二个定义被忽略
【发布时间】:2014-09-24 04:50:41
【问题描述】:

我在 font.h 文件中声明和定义字体数据,如下所示:

#ifndef _DEFAULT_FONT_H
#define _DEFAULT_FONT_H

const unsigned char wwDefaultFont_TextureData[] = 
{
    0x00,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
};

#endif

我打算在 render.h 文件中使用这个数组。 所以我将它包含为#include“font.h”

#include "font.h"

class render{

};

但我收到链接警告 LNK4006 错误?

声明此变量并避免此链接警告的最佳方法是什么?

【问题讨论】:

  • 查看extern 的作用。
  • @PaulMcKenzie const unsigned char x[] = { 'a' , 'b' }; 是正确的; const 变量有内部链接
  • 发布一个最小但完整的示例来说明问题。包括编译器版本、构建命令和确切的错误消息。
  • 当您只有一个包含此文件的文件时,您不会收到该错误...
  • 不过我还是收到了这个警告!我通过添加 font.cpp 修复了这个警告。我在 font.h 中将变量声明为 extern,并在 font.cpp 中定义了变量。然后我将头文件包含在我的 render.h 中。

标签: c++ visual-c++ linker


【解决方案1】:

我认为你可能没有定义头文件宏以避免重复包含头文件。 如果这是真的,您有两种方法可以避免这种情况:

  1. 使用

    #ifndef _FONT_H_
    #define _FONT_H_
    //font.h content
    ...
    #endif
    

    确保它只包含一次

  2. 如果只使用font.h中的const变体,可以使用extern来声明,不需要包含头文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 2011-12-29
    • 2013-09-29
    • 2013-09-15
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多