Str*_*ode 1 c++ stl new-operator c-preprocessor
我正在尝试解决我的程序的一部分,它有一个#define new.一切都运行良好,直到我尝试创建一个覆盖新运算符的类模板,当我得到错误时:
C:\Define_New_problem\main.cpp:18: error: expected type-specifier before 'dPushMemManFileLine'
C:\Define_New_problem\main.cpp:18: error: expected ';' before 'dPushMemManFileLine'
C:\Define_New_problem\main.cpp:21: error: expected ';' before '}' token
Process terminated with status 1 (0 minutes, 0 seconds)
Run Code Online (Sandbox Code Playgroud)
使用MinGW.(简化)代码如下:
#include <iostream>
#define new dPushMemManFileLine( __FILE__, __LINE__ ) ? 0 : new
using namespace std;
static const int NUM_NEW_STACK_SIZE = 256;
static struct { const char* filename; unsigned int line; } g_NewStackMemDebug[NUM_NEW_STACK_SIZE];
static int g_CurStack = -1;
template <class T>
class mypair {
private:
int a, b;
public:
mypair (int first, int second)
{a=first; b=second;}
static void* operator new(size_t size)
{
}
};
int dPushMemManFileLine( const char* filename, unsigned int line )
{
if(g_CurStack >= NUM_NEW_STACK_SIZE )
return 0;
g_CurStack++;
g_NewStackMemDebug[g_CurStack].filename = filename;
g_NewStackMemDebug[g_CurStack].line = line;
return 0; // needed for the new passthrough trick
}
int main()
{
cout << "Hello world!" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这个问题?
#define.关键词.请不要.它只会产生问题.A #define将所定义单词的所有出现替换为您定义的单词,因此在#define'd new展开后,运算符重载如下所示:
static void* operator dPushMemManFileLine( __FILE__, __LINE__ ) ? 0 : new(size_t size)
{
}
Run Code Online (Sandbox Code Playgroud)
Uuups ....
当然问题仍然存在,你为什么这样做?