gpt4 book ai didi

c++ - 重新定义自定义删除

转载 作者:行者123 更新时间:2023-11-28 02:00:02 25 4
gpt4 key购买 nike

我收到一条错误消息,提示我重新定义了函数 custom_delete。

标题.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);
}

主要.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 函数中的所有代码。我还尝试在宏之前编写原型(prototype)。我每次都遇到同样的错误。

---编辑---我发现还有另一个文件正在编译:标题.cpp

#include "header.h"

// Some commented out functions

如果我删除 #include "header.h" 一切正常。但是,我最终需要将函数添加到 header.cpp。这些函数需要添加到 header.h 中的内容。我该怎么办?

最佳答案

看起来您的 header 中没有包含守卫。

添加#pragma once作为header.h的第一行

或者为了更便携的解决方案,添加

#ifndef HEADER_H
#define HEADER_H

作为前两行,和

#endif

作为 header.h 的最后一行。

此外,为避免链接错误,请将 inline 关键字添加到您的函数声明中,例如 inline void custom_delete(...

或将函数实现移动到.cpp

关于c++ - 重新定义自定义删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39937197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com