#pragma once依然会重复包含
时间:2011-12-19
来源:互联网
描述:
a.h
#pragma once
void f()
{
}
b.h
#pragma once
#include"a.h"
void f2();
b.cpp
#include "b.h"
void f2()
{
}
main.cpp
#include<iostream>
#include "a.h"
#include "b.h"
int main()
{
return 0;
}
导致的错误:
Linking...
b.obj : error LNK2005: "void __cdecl f(void)" (?f@@YAXXZ) already defined in mian.obj
Debug/teset.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
疑问:#pragma once 只包含一次
a.h 只包含了一次啊。。。。。
但是提示却说:b.obj中 包含了
main.obj中 也包含了
所以多次包含。。。。
不是违背了 #pragma once???
后来我发现, 给a.h 再加一个a.cpp即可解决问题。。。。
我想知道什么原因????
作者: qunqun2012 发布时间: 2011-12-19
它是指在一个文件的编译中,该文件不会被包含多次
如果是多次编译多个文件,还是会被包含多次的(一个文件一次)
作者: keiy 发布时间: 2011-12-19
// code.h #pragma once // 如果注释掉,编译code.cpp就报错:重复定义 int i=0; // code.cpp #include "code.h" #include "code.h"
被不同的.cpp包含后,编译无错,但链接报错:int i 已定义于×××.obj
作者: yisikaipu 发布时间: 2011-12-19
#pragma once同一个文件不会被包含多次。
它是指在一个文件的编译中,该文件不会被包含多次
如果是多次编译多个文件,还是会被包含多次的(一个文件一次)
++
可以用
#ifndef XX_H
#define XX_H
#endif
作者: johnpher 发布时间: 2011-12-19
#ifndef XX_H
#define XX_H
#endif
这个没用的
解决多个.obj包含重复符号的办法,只能是把不应写到.h里的东西写到.cpp里
作者: yisikaipu 发布时间: 2011-12-19
#ifndef XX_H
#define XX_H
#endif
最好
移植性强 保险
作者: mayadong7349 发布时间: 2011-12-19
.h中还真不能 实现函数。。。。。
放到cpp中。。。。。
否则很可能引起主帖的问题。。。。。
引用 3 楼 johnpher 的回复:可以用
#ifndef XX_H
#define XX_H
#endif
这个没用的
解决多个.obj包含重复符号的办法,只能是把不应写到.h里的东西写到.cpp里
作者: qunqun2012 发布时间: 2011-12-19
#pragma once同一个文件不会被包含多次。
它是指在一个文件的编译中,该文件不会被包含多次
如果是多次编译多个文件,还是会被包含多次的(一个文件一次)
参照这个!
作者: qscool1987 发布时间: 2011-12-19
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28