2014-02-10 54 views
3

UPDATE:現在看來,這是我的錯,我沒有正確安裝CTP。 MS無法重現該錯誤。繼承的構造(使用)和移動

我想給一個變量從一個派生類移動到我的基類(它們之間存在着多類)

通常情況下,我會通過以const &的說法,但我想按價值傳遞它並將其向下移動,避免複製。

這裏是我的課:

#include <string> 

class base { 
public: 
    explicit base(std::string url) : url_{std::move(url)} {} 
    // prevent copy 
    base(const base&) = delete; 
    base& operator=(const base&) = delete; 
    virtual ~base() {} 

protected: 
    std::string url_; 
}; 

class derived : public base { 
public: 
    using base::base; 
}; 

class derived_final : public derived { 
public: 
    using derived::derived; 
    explicit derived_final(std::string url) : 
     derived{std::move(url)} 
    { 
     // do some stuff 
    } 
}; 


int main() { 
    derived_final df { "test" }; 
} 

和日誌:

e:\project\test\main.cpp(25) : error C2664: 'derived::derived(const derived &)': cannot convert argument 1 from 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' to 'const derived &' 
     Reason: cannot convert from 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' to 'const derived' 
     No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 

我也嘗試添加一個移動構造函數基地,藏漢作爲OP =。

但derived_final嘗試使用衍生的性病拷貝構造函數::字符串作爲參數,當我嘗試移動網址在derived_final的構造的。

任何想法爲什麼會發生這種情況? 我使用msvc 2013與CTP(「使用」支持)。

源位置:https://bitbucket.org/syl/c-11-inherited-constructor-and-move/src

+1

您可以包括'的main()'呢?我問,因爲使用uniform-init'derived_final df {「test」};'我沒有給出這種無效的copy-ctor消息。而且我不完全清楚爲什麼你不首先使用rval-refs來處理這些參數。 – WhozCraig

+1

這裏是沒問題的,你'使用衍生::而得;'以及'定義明確derived_final(的std :: string URL)' - 不使2個構建函數在'derived_final'具有完全相同的簽名?我還沒有使用此功能 – David

+0

我更新了完整列表和錯誤消息的帖子。我試圖刪除「明確」,但我仍然得到相同的錯誤。 @WhozCraig我也嘗試添加一個右值構造函數,仍然是一樣的錯誤。它仍然嘗試使用(const derived&) – Syl

回答

0

似乎是MSVC錯誤。 GCC報告沒有錯誤。

+0

看起來像。謝謝。 – Syl

+0

我安裝了2013年11月CTP:http://www.reddit.com/r/cpp/comments/1xhjwo/new_c_student_using_visual_studio_express_2012/cfbogip?context=3 – Syl

+0

我們又回到了「MSCV錯誤」呢:) –