头文件中的指针声明

时间:2017-06-04 13:57:25

标签: c++ pointers

进行一些开发,我遇到了一个非常奇怪的问题。我需要在头文件中声明指针,我想在cpp文件中分配它。请看这个片段:

ptr.h

#ifndef PTR_H
#define PTR_H

int* ptr;

#endif // PTR_H

ptr.cpp

#include "ptr.h"

void init() {
    ptr = new int;
}

void destroy() {
    delete ptr;
}

的main.cpp

#include "ptr.h"

int main() {
}

(是的,我知道,代码在内存安全方面非常差,但这不是重点)

使用命令编译:

g++ ptr.cpp main.cpp

给我带来以下错误:

/tmp/ccBvaGqX.o:(.bss+0x0): multiple definition of `ptr'
/tmp/ccmJWQcS.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status

你碰巧知道,为什么会这样?我的意思是,即使我有适当的包含警卫,但事实证明编译器看到int *p的多个定义。

我还应该指出,在我的实际代码中,这个指针不是原始指针,而是我在那里使用命名空间。但它在编译错误方面没有任何改变。

编辑: 请记住我的问题。我知道,宣布extern int* ptr会解决问题,但我的问题却不同。为什么,因为我有适当的包含保护,编译器看到ptr的多个定义?

0 个答案:

没有答案