我遇到以下代码问题:
#include<iostream>
#include<utility>
#define Row *prow
#define Col *pcol
typedef unsigned int uint;
typedef std::pair<uint, uint> Node;
uint Node::Row = &Node::first;
uint Node::Col = &Node::second;
int main()
{
Node node(1,2);
std::cout << node.*prow << node.*pcol << '\n'; // OK
std::cout << node.Row << node.Col << '\n'; // doesn't compile
}
我的想法是使用std :: pair,但将first
和second
替换为其他名称,在这种情况下Row
和Col
。但是,最后一行不会编译,即使它应该与它之前的行完全相同。如果有人能解释我为什么会这样,我真的很感激。我正在使用VS2015。
编辑:编译错误C2059 syntax error:'*'
答案 0 :(得分:2)
.*
是一个令牌。你的宏正在生成两个相邻的令牌.
和*
,这不是一回事。 (或者至少它可能会这样做。几乎可以肯定,你正在调用未定义的行为。)
可能有一个涉及令牌粘贴的解决方案,但你可以通过不在C ++中使用宏来帮自己一个大忙(让Bjarne高兴)。