我收到一个错误,说我已经重新定义了一个函数custom_delete。重新定义自定义删除
header.h
#include <iostream>
#include <string>
static int unfreed_count = 0;
#define DELETE(O) custom_delete(O,__PRETTY_FUNCTION__, __LINE__)
void custom_delete(void* ptr, const std::string& function_name, unsigned int line_number) {
unfreed_count--;
std::cout << "delete called in " + function_name + ":" << line_number << std::endl;
std::cout << "unfreed_count: = " << unfreed_count << std::endl << std::endl;
free(ptr);
}
的main.cpp
#include "header.h"
int main(int argc, char* argv[]) {
int* ptr = new int;
DELETE(ptr);
}
在试图编译该代码产生以下错误消息:
main.cpp: In function 'void custom_delete(void*, const string&, unsigned int)':
main.cpp:5:6: error: redefinition of 'void custom_delete(void*, const string&, unsigned int)'
void custom_delete(void* ptr, const std::string& function_name, unsigned int line_number) {
^
In file included from main.cpp:21:0:
header.h:7:6: note: 'void custom_delete(void*, const string&, unsigned int)' previously defined here
void custom_delete(void* ptr, const std::string& function_name, unsigned int line_number) {
^
我试图使自定义当它被使用时打印出来的删除版本。这是一个更大的项目,所以我做了一个单独的项目,只有这两个文件,并得到相同的错误。
我试着注释掉custom_delete
函数中的所有代码。我也尝试在宏之前编写原型。每次都收到同样的错误。
---编辑--- 我发现有被编译另一个文件: header.cpp
#include "header.h"
// Some commented out functions
如果我删除#include "header.h"
一切正常。但是,我最终需要将这些函数添加到header.cpp。这些函数需要添加到header.h中的东西。我该怎么办?
如果将'#define DELETE(O)custom_delete(O,__ PRETTY_FUNCTION__,__LINE __)'移动到'custom_delete'之后会发生什么? – NathanOliver
@NathanOliver我刚刚尝试过,结果相同。 :-( – Halbort
除了其他所有与此有关的错误之外,试图释放()一些新的东西会导致不确定的行为,你不能'free'''什么'new'ed。 –