使用指向成员和宏的指针

时间:2015-08-17 19:47:49

标签: c++ visual-studio

我遇到以下代码问题:

#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,但将firstsecond替换为其他名称,在这种情况下RowCol。但是,最后一行不会编译,即使它应该与它之前的行完全相同。如果有人能解释我为什么会这样,我真的很感激。我正在使用VS2015。

编辑:编译错误C2059 syntax error:'*'

1 个答案:

答案 0 :(得分:2)

.*是一个令牌。你的宏正在生成两个相邻的令牌.*,这不是一回事。 (或者至少它可能会这样做。几乎可以肯定,你正在调用未定义的行为。)

可能有一个涉及令牌粘贴的解决方案,但你可以通过不在C ++中使用宏来帮自己一个大忙(让Bjarne高兴)。