一个C++类函数

foo*_*ool 3 c++ class

一个简单的c ++文件和TT类有两种方法.

#include <map>
#include <string>
#include <iostream>

using namespace std;

class TT{ 
    public:
        TT(const string& str);
        template<class T>T Read(const string& key)const;
        template<class T>T Read(const string& key, const T& value)const;
};

TT::TT(const string& str){
    cout<<str<<endl;
}

template<class T>T TT::Read(const string& key)const{
    std::cout<<key<<std::endl;
    return 1;
}

template<class T>T TT::Read(const string& key, const T& value)const{
    std::cout<<key<<'\t'<<value<<std::endl;
    return value;
}

int main(void){
    TT tt("First");

    tt.Read("Hello", 12);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

如果更换

tt.Read("Hello world!", 12);
Run Code Online (Sandbox Code Playgroud)

tt.Read("Hello world!");
Run Code Online (Sandbox Code Playgroud)

主()

G ++说:

new.cc:31:错误:没有匹配函数来调用'TT :: Read(const char [5])'

为什么G ++找不到Read(const string&key)const方法?

谢谢!

Yuu*_*shi 6

您正在尝试定义一个返回T的函数:

template<class T>
T TT::Read(const string& key) const
{
    std::cout << key << std::endl;
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

但是,您始终int从此功能返回一个.您需要像这样调用它:

tt.Read<int>("Hello");
Run Code Online (Sandbox Code Playgroud)

或者删除模板定义,因为这里没有意义.