qua*_*els 3 c++ c-preprocessor
我知道预处理器命令是头文件的重要组成部分,以防止vars和类被多次定义.
我一直在遇到多次定义我的vars的问题 - 即使使用预处理器包装器也是如此.以下是遇到编译器错误的示例项目:
标题:
// TestInclude.h
#ifndef TESTINCLUDE_H_
#define TESTINCLUDE_H_
int myInt;
#endif /*TESTINCLUDE_H_*/
Run Code Online (Sandbox Code Playgroud)
C++:
// TestInclude.cpp
#include <iostream>
#include "IncludeMe.h"
#include "TestInclude.h"
int main( int argc, char* args[] )
{
std::cin >> myInt;
IncludeMe thisClass;
std::cin >> myInt;
}
Run Code Online (Sandbox Code Playgroud)
标题:
// IncludeMe.h
#ifndef INCLUDEME_H_
#define INCLUDEME_H_
class IncludeMe
{
private:
int privateInt;
public:
IncludeMe();
};
#endif /*INCLUDEME_H_*/
Run Code Online (Sandbox Code Playgroud)
C++:
// IncludeMe.cpp
#include <iostream>
#include "IncludeMe.h"
#include "TestInclude.h"
IncludeMe::IncludeMe()
{
std::cout << "myInt: " << myInt;
}
Run Code Online (Sandbox Code Playgroud)
然后我这样编译:
Makefile文件:
all:
g++ -g -o TestInclude TestInclude.cpp IncludeMe.cpp
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
/tmp/ccrcNqqO.o:在功能`IncludeMe ':
/home/quakkels/Projects/c++/TestInclude/IncludeMe.cpp:6:的`明特多个定义'
/tmp/ccgo6dVT.o:/home/quakkels/Projects/ c ++/TestInclude/TestInclude.cpp:7:首先在这里定义
collect2:ld返回1退出状态
make:***[all]错误1
当我在头文件中使用预处理器条件时,为什么会出现此错误?
包含警卫不能防止多种定义.它们只能防止无限递归包含.(当然,您可以在多个翻译单元中包含相同的标题!)
你不应该在标题中有对象定义*; 只有声明:
header.hpp:
extern int a;
Run Code Online (Sandbox Code Playgroud)
file.cpp:
#include "header.hpp"
int a = 12;
Run Code Online (Sandbox Code Playgroud)
*)您可以在头文件中使用类定义,以及inline函数和类成员函数.
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |