【问题标题】:unresolved external symbol C++ Embedded未解析的外部符号 C++ Embedded
【发布时间】:2013-04-04 13:31:25
【问题描述】:

我在这个问题上被困了几天,即使谷歌回复了很多,我也找不到我的问题的答案,这似乎是一个相当抽象的问题。

这是我在 H 中的代码:

struct DISPLAYLINE_t {
         char  *text;
         bool isWhite;
         void set(char *txt, bool iswhite){text = txt; isWhite = iswhite;};
};

struct DISPLAY {   
    static DISPLAYLINE_t line1,line2,line3,line4; 
    void clear(){//dostuff};
};

当我尝试从我的 Main 访问时:

DISPLAY::line1.set(string, FALSE);

我收到以下错误:

错误 LNK2019:未解析的外部符号 "public: static struct DISPLAY::line1" (?line1@DISPLAY@@2UDISPLAYLINE_t@@A) 在函数 WinMain 中引用

有什么想法吗?

【问题讨论】:

标签: c++ linker embedded unresolved-external


【解决方案1】:

您必须在全局命名空间范围内为您的静态数据成员(至少对于您在代码中使用 odr 的那些)提供一个定义

DISPLAYLINE_t DISPLAY::line1;
DISPLAYLINE_t DISPLAY::line2;
DISPLAYLINE_t DISPLAY::line3;
DISPLAYLINE_t DISPLAY::line4;

This live example 显示您应该如何修复您的程序。

【讨论】:

  • 干杯,你摇滚!出于好奇……您所说的“使用 odr”是什么意思?
  • @Jmorvan:很高兴它有帮助:)
  • “使用odr”是什么意思?
  • @Jmorvan:这是一个技术术语,它在 C++11 标准第 3.2 段中定义:“名称显示为潜在评估的变量或非重载函数表达式是 odr 使用的,除非它是一个满足出现在常量表达式 (5.19) 中的要求并且立即应用左值到右值转换 (4.1) 的对象。"。换句话说,由于line1 的名称出现在可能计算的表达式中(并且您的数据成员不是constexpr),因此您正在使用它
猜你喜欢
  • 2013-02-28
  • 2012-11-19
  • 1970-01-01
  • 2012-12-17
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多