2012-05-07 45 views
2

林賦值運算符和C字符串使得這應該是能串類指派C字符串相同的方式,我能夠一類:問題在C++

string a = "My string"; 

我的問題它的接縫就像它不是用於此目的的operator=(char operand)。所以我的問題是這個:用什麼來代替?

我有什麼:

class exstring 
{ 
    ... 

    public: 
    exstring& operator=(char*); 

    ... 
}; 

... 

int main() 
{ 
    exstring test = "test"; 
} 

其中給出:

main.cpp:9:22: error: conversion from ‘const char [19]’ to non-scalar type ‘std::exstring’ requested 

任何想法?

回答

11

您不打電話給您的operator =這裏。您需要了解賦值和初始化之間的區別。你在做什麼是初始化,你需要一個構造函數來接受你提供的參數。換句話說:

extring test = "test"; 

是完全一樣的:

extring test("test"); 

除了在後一種情況下的構造可能是明確的,但不是前者。

+3

'operator ='仍然是錯誤的,因爲它採用'char *'而不是'const char *'。 – pmr

+0

聽起來像構造函數(在示例中未顯示)需要接受'const char *' – Benj

+3

還有另一個區別。如果複製構造函數是私有的,但有一個可訪問的構造函數採用'const char *',則第一個定義將失敗。從技術上講,第一個相當於調用兩個構造函數(優化器可能會選擇忽略一個) - 第二個是直接初始化,並且只有一個構造函數調用 –