c++17 错误消息:"reference to non-static member function must be called" 在向量上使用宏时

c++17 error message: "reference to non-static member function must be called" when using a macro on a vector

我正在学习 C++,并且正在研究宏。我尝试将 push_back 定义为 pub,但它给了我这个错误:

error: reference to non-static member function must be called
  vect.pub(1);

这是我的代码:

#include <vector>

using namespace std;
typedef vector<int> vi;
#define pub push_back;

int main(){
  vi vect;
  vect.pub(1);
}

当我没有使用 #define 而只是写 push_back 时,没有错误消息。

我使用宏后到底发生了什么变化?

你不应该放';'对于宏。

 #include <vector>

 using namespace std;
 typedef vector<int> vi;
 #define pub push_back

 int main(){
   vi vect;
   vect.pub(1);
 }
#define pub push_back;

//...

vect.pub(1);

这扩展为以下内容,由于额外的 ;.

语法无效
vect.push_back;(1);

所以删除 ;#define pub push_back

I'm learning c++ and was playing around with macros.

Stop. push_back最多6次额外击键。代码是供人类阅读的。您在文档中找不到 pub,但可以找到 push_back.

同样,using namespace std;也是一个糟糕的习惯。有 负载 的名称您没有意识到您刚刚导入到那里的全局名称空间中。