c++ - 你可以调用模板参数成员的成员吗?

标签 c++ templates c++11

我好像做错了什么,但我不确定是什么。这是我正在尝试做的最小的例子:

#include <iostream>

using std::cout;

class CallMe {
 public:
  void Maybe() {
    cout << "A";
  }
};

class TemplateValue {
 public:
  static CallMe call_me;
};

template<typename T>
void CallMemberMember() {
  T::call_me.Maybe();
}

int main(int argc, char *argv[]) {
  CallMemberMember<TemplateValue>();
}

当我尝试构建它时,出现链接错误:

$ clang++ --std=c++11 repro_link_error.cc
Undefined symbols for architecture x86_64:
  "TemplateValue::call_me", referenced from:
      void CallMemberMember<TemplateValue>() in repro_link_error-9BE9gw.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我做错了什么?

最佳答案

你需要为静态成员call_me提供定义:

CallMe TemplateValue::call_me;
int main(int argc, char *argv[]) {
  CallMemberMember<TemplateValue>();
}

关于c++ - 你可以调用模板参数成员的成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14119014/

相关文章:

c++ - BOOST单元测试堆栈溢出

html - 电子邮件模板管理器工具

c++ - 使用 C++11 编写 Win32 应用程序

c++ - 使用未命名命名空间的字段名称与字段类型相同

c++ - move 类数组成员所需的构造函数

c++ - 在 mida 保护下的 Dllmain 死锁

c++ - 我可以推断作为模板参数传递的函数的返回类型吗?

c++ - 为什么不能将 Q_OBJECT 与模板类一起使用?

java - 将 FreeMarker 与 EXPOSE_PROPERTIES_ONLY 结合使用

c++ - 尝试调用字符串变量时出错