(std :: __ cxx11 :: string)[with T = std :: __ cxx11 :: basic_string <char>; std :: __ cxx11 :: string = std :: __ cxx11 :: basic_string <char>]无法重载

时间:2017-09-29 12:42:23

标签: c++ string c++11 stl

C ++在模板中显示构造函数重载错误

(std::__cxx11::string) [with T = std::__cxx11::basic_string<char>; std::__cxx11::string = std::__cxx11::basic_string<char>]cannot be overloaded

我试图在这里重载一个Template类构造函数。 扩展错误:

In file included from main.cpp:2:0:
dlist.h: In instantiation of class Sinwan::DList::DoublyLinkList<std::__cxx11::basic_string<char> >:
main.cpp:5:45:   required from here
dlist.h:62:13: error:Sinwan::DList::DoublyLinkList<T>::DoublyLinkList(std::__cxx11::string) [with T = std::__cxx11::basic_string<char>; std::__cxx11::string = std::__cxx11::basic_string<char>] cannot be overloaded
             DoublyLinkList(std::string dummyData_)
             ^
dlist.h:52:13: error: with Sinwan::DList::DoublyLinkList<T>::DoublyLinkList(T) [with T = std::__cxx11::basic_string<char>]
             DoublyLinkList(T dummyData_)
我的.h文件中的

代码:

DoublyLinkList(T dummyData_)
{
    node = new Node;//dummy node
    node->_next=NULL;
    node->_prev=NULL;
    node->_data=dummyData_;
    head=node;
    tail=node;
    _iteratorObj=begin();
}
DoublyLinkList(std::string dummyData_)
{
    node = new Node;//dummy node
    node->_next=NULL;
    node->_prev=NULL;
    node->_data=dummyData_;
    head=node;
    tail=node;
    _iteratorObj=begin();
} 

Main.cpp的:

#include<iostream>

#include "dlist.h"

int main()

{

Sinwan::DList::DoublyLinkList<std::string>::Iterator it;

Sinwan::DList::DoublyLinkList<std::string> listObj("0");

}

如果我将std :: string更改为int,它可以正常工作。任何人都可以帮我指出prblm ??

1 个答案:

答案 0 :(得分:0)

我们仍然没有Minimal, Complete, and Verifiable Example,但至少可以猜测这个问题。

假设T是一个类模板参数,那么如果你有DoublyLinkList<std::string>,那么类型T将是std::string,你就会有两个< / em>构造函数以std::string为参数。你不能拥有它,如果你重载一个函数(构造函数或其他),必须有不同的签名。

你可能不应该让构造函数采用明确的std::string参数。