C 三元操作员具有范围分辨率和条件
C++ Ternary operator with scope resolution and condition
以下代码未由特定编译器编译。
#include <iostream>
using namespace std;
class A{
public:
static const int x = 12;
static const int y = 16;
};
int main(){
int a = 12, b = 19;
int z = (a==b)?(A::x):(A::y);
cout<<z<<endl;
return 0;
}
编译器 G (GCC(4.8.5 20150623(Red Hat 4.8.5-11(成功地编译了。
编译器 G (GCC(4.4.7 20120313(红色帽子4.4.7-17(正在引起编译错误
test.cpp:(.text+0x20): undefined reference to `A::x'
test.cpp:(.text+0x28): undefined reference to `A::y'
如果我用true
或false
替换了int z = (a==b)?(A::x):(A::y);
中的条件(a==b)
,则将其成功编译。
如何解决指定编译器的原因以及如何修复?
看起来像弱/buggy C 0x符号 - 链接实现GCC 4.4。GCC 4.4似乎告诉链接器有符号,但忘了在其中一个编译单元中"实现"它们。
我猜想,如果将静态成员的初始化a :: x和a :: y明确地放入一个唯一的编译单元(例如,相应的.cpp文件(,则您的代码可能与两个编译器兼容。
。相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 尝试通过多个向量访问变量时,向量下标超出范围
- 错误:未在此范围内声明'reverse'
- 正在将指针转换为范围
- 使用std::transform将一个范围的元素添加到另一个范围中
- 在基于范围的for循环中使用结构化绑定声明
- 如何计算数据类型的范围,例如int
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 在C++中查找范围的长度
- 如何设置一个范围来提取我想要获得的信息
- 并行用于C++17中数组索引范围内的循环
- 范围分辨率运算符在类型:: var的情况下返回什么
- 如何在C 中访问无范围分辨率运算符的标头构件类型
- C 三元操作员具有范围分辨率和条件
- 范围分辨率运算符被两次使用
- 如何获取当前的 Windows 系统范围的计时器分辨率
- 从幻数到int或long的重载分辨率(范围为v3)
- 范围分辨率 :: 与此 ->
- ADL与范围分辨率——更喜欢哪一种
- 可视化C++typedef与奇怪的范围分辨率运算符