1

我有一个模板化的 SortedLinkedList 类,它按主题 A 对象的字符串字段中包含的值对其进行排序。

这是主题A:

struct TopicA
{
string sValue;
double dValue;
int iValue; 

TopicA();
TopicA( const string & arg );

bool operator> ( const TopicA & rhs ) const;
bool operator< ( const TopicA & rhs ) const;
bool operator== ( const TopicA & rhs ) const;
bool operator!= ( const TopicA & rhs ) const;
};

我想在列表中找到"tulgey"存储其字符串字段中的 TopicA 对象的位置,所以我调用AList.getPosition( "tulgey" );Here is the getPosition()header:

template <class ItemType>
int SortedLinkedList<ItemType>::getPosition( const ItemType& anEntry ) const

但是当我尝试调用getPosition()编译器时,标题中出现了错误。为什么?我没有从stringto的转换构造函数TopicA吗?

如果它有什么不同,这里的定义是TopicA( const string & arg )

TopicA::TopicA( const string & arg ) : sValue( arg ), dValue( 0 ), iValue( 0 )
{
}
4

2 回答 2

5

您可能正在调用两个隐式转换, from const char[7]tostd::string和 from std::stringto TopicA。但是您只允许进行一次隐式转换。您可以通过更明确地解决问题:

AList.getPosition( std::string("tulgey") ); // 1 conversion
AList.getPosition( TopicA("tulgey") );      // 1 conversion

或者,您可以为TopicA构造函数提供一个const char*

TopicA( const char * arg ) : sValue( arg ), dValue( 0 ), iValue( 0 ) {}
于 2013-02-05T08:34:17.833 回答
3

这些会起作用

AList.getPosition( TopicA("tulgey") ); 

AList.getPosition( TopicA("tulgey") ); 

std::string query = "tulgey";
AList.getPosition( query  ); 

或者,您可以定义另一个转换构造函数

TopicA( const char* arg );

现在一切都会如你所愿

AList.getPosition( "tulgey" );

问题是您需要 2 次隐式转换标准只允许 1次。请记住,字符串文字表示为charinC++和 not的数组string

  1. char*/ char[]->std::string
  2. std::string->TopicA
于 2013-02-05T08:33:51.973 回答