#pragma 一次的问题
Problems with #pragma once
#pragma once
在编译我一直在做的项目时无法正常工作。 在阅读了该主题之后,我看到使用它的一个缺点是,如果相同的文件位于不同的位置,那么它将无法像使用包含保护的另一种方式那样工作:
#ifndef __SOMETHING_H__
#define __SOMETHING_H__
这是错误:
../../engine/scene/../common/../bitsquid/queue.h:78:29: error: redefinition of ‘template<class T> void foundation::queue::reserve(foundation::Queue<T>&, uint32_t)’
../../engine/scene/../common/../bitsquid/queue.h:78:29: error: ‘template<class T> void foundation::queue::reserve(foundation::Queue<T>&, uint32_t)’ previously declared here
您可以看到路径是相同的。 我正在使用g ++来编译源代码。 我通常会用另一种样式的包含保护替换它,但我想避免这种情况,因为我没有编写库。
GCC 版本是 4.6.3
#pragma once
的定义是当前文件只包含一次。
如果将其复制到其他地方,则文件会有所不同,这意味着从#pragma once
的角度来看,它被认为是不同的。
如果要将文件复制到其他地方并获得与#pragma once
类似的行为,则需要使用包含保护。
此外,您不应该将
__HEADER_H__
用于包含保护,使用前导__
是保留的,可能会导致细微的错误。
此外,在查看了 bitbucket 上的代码后,文件queue.h
既没有#include
保护,也没有#pragma once
保护,这表明在这种情况下存在错误的前提。
如果您尝试将一堆.cpp文件修改为一个文件,并且在这种情况下它们#include
相同的文件,那么您会收到此确切错误。
相关文章:
- 我是否需要在下一次转移时将所有权*转移回转移队列
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 在C++中一次将矢量值写入多个文件
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 为什么 zlib 放气初始化调用一次不起作用?
- 在一次迭代中从 txt 文件中读取多行
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 高级选择排序 - 在一次迭代中搜索两个元素
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- 使用迭代器时遇到问题,每 M 次传递一次擦除一个向量项
- C++菱形问题 - 如何仅调用一次基方法
- #pragma 一次的问题
- 在C++中一次一行地从文本文件中读取int(好的字符,然后转换)时出现问题
- C++将节点添加到链表的开头一次后失败.其他方法也有问题
- C++ SQLite 查询只工作一次。我的代码有什么问题?
- 如何使"strtok function"一次使用多个令牌字符串? 函数指针会解决这个问题吗?
- 对于原始数组和std::vector,明显没有对下标进行过一次结束的说明.这个问题已经得到了决定性的解决吗?
- c#和c++中虚函数情况下编译器行为的差异.这是我在一次采访中被问到的问题