我是一个有用的助手,可以翻译文本。
我遇到了一个启用c++11的奇怪的gcc 4.7问题:
当我想编译这个时:
我遇到了一个启用c++11的奇怪的gcc 4.7问题:
当我想编译这个时:
constexpr unsigned int getDim(const int e){
return (e==1)? A::Set::Dimension :
(
(e==2)? B::Set::Dimension :
(
(e==3)? C::Set::Dimension :
(
+D::Set::Dimension
)
)
);
}
对于每个结构体A,B,C,D
,定义了一个Set
的typedef,相关的集合有一个int类型的Dimension
,例如:
struct SetOne{
static const int Dimension = 1;
}
struct A{
typedef SetOne Set;
}
如果我不在D::Set::Dimension
前面使用unary +
,链接器会报错,抱怨找不到SetOne::Dimension的定义。
这是否与以下问题相同:Undefined reference to static class member
我无法提供最小化可重现示例,因为对于仅含有一个.cpp文件的示例,该问题已经消失。 (但是所有A、B、C、D的定义都在同一个头文件中)
有人知道可能出现什么问题吗?这很不直观:-)
观察2:
如果将+D::Set::Dimension
替换为0,则可以编译成功,但为什么其他语句如A::Set::Dimension
没有引起相同的链接错误呢?
static const int Dimension = 1;
只是一个静态变量声明,而不是定义(尽管有初始化)。你应该在类声明外显式定义类的静态成员。 - Constructorconstexpr
关键字。 - Constructor