我想用一个宏来实现pData->w_i->j
其中i和j是变量,
用#define GetData(a,b) pData->w_###i##->##j
不行,不知道各位有什么方法没?

解决方案 »

  1.   

    #define GetData(a,b)   (pData->w_a->b)下面的是我的测试代码:
    #include "stdafx.h"
    #include "iostream"
    using namespace std;
    #define GetData(a,b)   (A[a][b])
    int _tmain(int argc, _TCHAR* argv[])
    { int A[][3] = {{1,2,3},{4,5,6}};
    cout<<GetData(1,1)<<endl;
    }
    输出结果为5;
      

  2.   

    问题是a和b是变量
    比如说事1到10的循环,我不能写成getdata(1,1),getdata(1,2)这样吧
    是想写成for(i = 0; i < 10; i++)
    {
       GetData(i,b);
    }
      

  3.   

    问题是a和b是变量
    比如说事1到10的循环,我不能写成getdata(1,1),getdata(1,2)这样吧
    是想写成for(i = 0; i < 10; i++)
    {
       GetData(i,b);
    }
      

  4.   

    您传入变量也是可以的啊
    #include "stdafx.h"
    #include "windows.h"
    #include "iostream"
    using namespace std;
    #define GetData(a,b)   (A[a][b])
    int _tmain(int argc, _TCHAR* argv[])
    { int A[][3] = {{1,2,3},{4,5,6}};
    int i = 1, j = 1;
    cout<<GetData(i,j)<<endl;
    }
      

  5.   

    俺明确的告诉你,不行:C/C++不是VB,运行期间支持宏替换,C/C++在编译期间就展开老
      

  6.   

    考虑别的解决方案吧
    不知道你的结构为什么这么定义
    看你的代码好像是
    {
    ...
    w w_0;
    w w_1;
    w w_2;
    ...
    }
    如果是这样的话,改为
    {
    ...
    w w_[3];
    ...
    }访问的时候用w_[i]就行了