多个cpp文件中的一个头文件:多重定义
One header file in multipe cpp files: Multiple definition
我正在尝试访问多个 C++ 文件中的一个头文件。头文件定义如下:
#ifndef UTILS
#define UTILS
void toUpper(string &str) {
for(unsigned int i=0; i<str.length(); i++) {
str.at(i) = toupper(str.at(i));
}
}
void toLower(string &str) {
for(unsigned int i=0; i<str.length(); i++) {
str.at(i) = tolower(str.at(i));
}
}
#endif // UTILS
编译代码时出现以下错误:
据我所知,这不应该 return 多个定义,因为我限制代码被定义多次。我还尝试使用预编译指令“#pragma once”
这个问题有 2 个解决方案。
解决方案 1
您可以在函数前面添加关键字 inline
,例如:
myfile.h
#ifndef UTILS
#define UTILS
inline void toUpper(string &str) {
for(unsigned int i=0; i<str.length(); i++) {
str.at(i) = toupper(str.at(i));
}
}
inline void toLower(string &str) {
for(unsigned int i=0; i<str.length(); i++) {
str.at(i) = tolower(str.at(i));
}
}
#endif // UTILS
现在您可以将此 header 包含在不同的文件中而不会出现上述错误。
解决方案 2
您可以创建一个单独的 .cpp 文件并将定义放在那里。这看起来像:
myfile.h
#ifndef UTILS
#define UTILS
//just declarations here
void toUpper(string &str); //note no inline keyword needed here
void toLower(string &str); //note no inline keyword needed here
#endif // UTILS
myfile.cpp
#include "myheader.h"
void toUpper(string &str) {
for(unsigned int i=0; i<str.length(); i++) {
str.at(i) = toupper(str.at(i));
}
}
void toLower(string &str) {
for(unsigned int i=0; i<str.length(); i++) {
str.at(i) = tolower(str.at(i));
}
}
我正在尝试访问多个 C++ 文件中的一个头文件。头文件定义如下:
#ifndef UTILS
#define UTILS
void toUpper(string &str) {
for(unsigned int i=0; i<str.length(); i++) {
str.at(i) = toupper(str.at(i));
}
}
void toLower(string &str) {
for(unsigned int i=0; i<str.length(); i++) {
str.at(i) = tolower(str.at(i));
}
}
#endif // UTILS
编译代码时出现以下错误:
据我所知,这不应该 return 多个定义,因为我限制代码被定义多次。我还尝试使用预编译指令“#pragma once”
这个问题有 2 个解决方案。
解决方案 1
您可以在函数前面添加关键字 inline
,例如:
myfile.h
#ifndef UTILS
#define UTILS
inline void toUpper(string &str) {
for(unsigned int i=0; i<str.length(); i++) {
str.at(i) = toupper(str.at(i));
}
}
inline void toLower(string &str) {
for(unsigned int i=0; i<str.length(); i++) {
str.at(i) = tolower(str.at(i));
}
}
#endif // UTILS
现在您可以将此 header 包含在不同的文件中而不会出现上述错误。
解决方案 2
您可以创建一个单独的 .cpp 文件并将定义放在那里。这看起来像:
myfile.h
#ifndef UTILS
#define UTILS
//just declarations here
void toUpper(string &str); //note no inline keyword needed here
void toLower(string &str); //note no inline keyword needed here
#endif // UTILS
myfile.cpp
#include "myheader.h"
void toUpper(string &str) {
for(unsigned int i=0; i<str.length(); i++) {
str.at(i) = toupper(str.at(i));
}
}
void toLower(string &str) {
for(unsigned int i=0; i<str.length(); i++) {
str.at(i) = tolower(str.at(i));
}
}