123*_*123 1 c++ header visual-studio
我在项目中遇到了一个非常奇怪(且令人讨厌)的链接器错误.
比方说,我有文件KernelExports.h:
#pragma once
extern "C"
{
DWORD* KeTimeStampBundle;
DWORD KeGetCurrentProcessType();
//etc...
}
Run Code Online (Sandbox Code Playgroud)
我然后#include在我的stdafx.h中,然后添加#include "stdafx.h"所有我的*.cpp文件.问题是,现在每当我建我得到的链接错误流:LNK2005: KeTimeStampBundle already defined in stdafx.obj.这不应该发生,因为头文件只包含在一个文件中并受到包含保护的保护.一旦我注释掉整个extern "C"块,错误就会停止,所以我知道这就是导致问题的原因.
更奇怪的是,当我将所有这些源文件添加到它构建的新项目时没有任何问题.我不知道这里有什么问题,任何人都可以启发我吗?
我的IDE是Visual Studio 2008.
DWORD* KeTimeStampBundle;
Run Code Online (Sandbox Code Playgroud)
这不会声明一个函数.它声明并定义了一个DWORD*名为的对象KeTimeStampBundle.如果将此头文件包含在多个源文件中,则将具有此对象的多个定义(每个源文件中包含一个头文件).
包括警卫并#pragma once确保在给定的翻译单元(源文件)中仅定义一次.它们对多个翻译单元的定义方式没有影响.
| 归档时间: |
|
| 查看次数: |
1609 次 |
| 最近记录: |