我正在编写自己的操作系统,所以我编写了一个printf实现。我将代码分成2个文件: coolio.h:
#ifndef __COOLOS__COOLIO_H
#define __COOLOS__COOLIO_H
namespace coolOS{
namespace common{
void printf(char* str);
void printfHex(char bit);
}
}
#endif
和coolio.cpp:
#include<common/coolio.h>
using namespace coolOS::common;
void printf(char* str){
//printf implementation
}
void printfHex(char key){
char * msg = "00";
//converts key and puts it in msg
printf(msg);
}
我收到以下错误:
error: call of overloaded ‘printf(char*&)’ is ambiguous
似乎有些人如何重载printf函数而不是实现它......
答案 0 :(得分:4)
使用时
using namespace coolOS::common;
void printf(char* str){
//printf implementation
}
它没有在您的命名空间中定义上述printf
。它定义了一个全局printf
函数,它不是您想要的。使用以下命令在命名空间中定义它们。
namespace coolOS
{
namespace common
{
void printf(char* str){
//printf implementation
}
void printfHex(uint8_t key){
char * msg = "00";
//converts key and puts it in msg
printf(msg);
}
}
}
如果减少一些输入对您很重要,您还可以在.cpp文件中使用以下内容:
namespace common = coolOS::common;
void common::printf(char* str){
//printf implementation
}
void common::printfHex(int key){
char * msg = "00";
//converts key and puts it in msg
printf(msg);
}
答案 1 :(得分:0)
我发现了我的错误......我应该在printf / printfHex减速之前使用coolsOS :: common ::。
coolOS::common::printf(char *str){ ...
我对c ++很新,所以我不知道在实现函数时我必须这样做