调用重载'func(char *&)'是不明确的

时间:2018-01-08 19:21:35

标签: c++

我正在编写自己的操作系统,所以我编写了一个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函数而不是实现它......

2 个答案:

答案 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 ++很新,所以我不知道在实现函数时我必须这样做