用c ++替换另一个宏中的一个宏

时间:2014-03-21 16:48:10

标签: c++ macros

#include <iostream>
#include <string.h>

#define DEFAULT 100
#define ADD(A,B) "A is : " + A + "Default is : " + DEFAULT + "B is : " + B

using namespace std;

int main()
{
    string A = "a";
    string B = "b";

    cout << ADD(A,B) << endl;

    return 0;
}

我希望输出为A is : a Default is : 100 B is : b

但是当我编译这个程序时,它给了我编译错误。

2 个答案:

答案 0 :(得分:2)

我不确定你要做什么。但是100你不能添加到一个字符串。将其定义为字符串。

   #define DEFAULT "100"
   #define ADD(A,B) "A is : " + A +"Default is:" +DEFAULT+ " B is : " + B

   using namespace std;

   int main()
   {
       string A = "a";
       string B = "b";

       cout << ADD(A,B) << endl;

       return 0;
  }

答案 1 :(得分:0)

您无法添加字符串和整数。但是使用C ++ 11,您可以将该int转换为带有std::to_string(100)的字符串。即:

#define ADD(A,B) "A is : " + A + "Default is : " + std::to_string(DEFAULT) + "B is : " + B

此外,为了将来参考,请务必包含确切的错误消息(从编译器输出中复制并粘贴)。

最后一件事:不要包括<string.h>。相反,只需加入<string>即可。 <string.h>是C字符串标头(其C ++双精度为<cstring>),并且该标头没有std::string或许多您可能会追溯的其他功能。