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
您可以包括'的main()'呢?我問,因爲使用uniform-init'derived_final df {「test」};'我沒有給出這種無效的copy-ctor消息。而且我不完全清楚爲什麼你不首先使用rval-refs來處理這些參數。 – WhozCraig
這裏是沒問題的,你'使用衍生::而得;'以及'定義明確derived_final(的std :: string URL)' - 不使2個構建函數在'derived_final'具有完全相同的簽名?我還沒有使用此功能 – David
我更新了完整列表和錯誤消息的帖子。我試圖刪除「明確」,但我仍然得到相同的錯誤。 @WhozCraig我也嘗試添加一個右值構造函數,仍然是一樣的錯誤。它仍然嘗試使用(const derived&) – Syl