我正在编译一些依赖于包含保护的代码,以防止对象和函数的多个定义,但Visual Studio 2008给了我链接错误,有多个定义.我不明白为什么,因为我之前使用的代码非常类似,并没有造成问题.我必须做一些愚蠢的事,但我不知道它是什么.我也尝试取出包含警卫并使用#pragma一次,但我得到了相同的链接错误.我应该检查什么?
我从mbed C++编译器收到的错误消息似乎表明包括警卫在内的故障.
在main.cpp中,我包含我的头文件如下:
#include "mbed.h"
#include "sample.h"
Run Code Online (Sandbox Code Playgroud)
这是我的sample.h:
#include "mbed.h"
#ifndef STUFF_H
#define STUFF_H
/* LEDs */
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);
/* Subroutines */
void sweepLEDs();
void pulseLEDs(int numPulses);
void clearLEDs();
#endif
Run Code Online (Sandbox Code Playgroud)
在sample.cpp中,我包括sample.h,如下所示:
#include "sample.h"
Run Code Online (Sandbox Code Playgroud)
在main.cpp和sample.cpp中,我指的是变量led1, led2, led3, led4而没有声明它们.但是,编译器正在输出这些投诉:
"符号led1多次定义(通过sample.cpp.cpp.LPC1768.o和main.cpp.cpp.LPC1768.o)." ..."符号led4多重定义(通过sample.cpp.cpp.LPC1768.o和main.cpp.cpp.LPC1768.o)."
我的包括卫兵写得不正确吗?还是有其他问题吗?