簡體   English   中英

轉換運算符(assignment operator =)沒有響應

[英]conversion operator (assignment operator=) is not responding

我一直在嘗試測試對我的結構的賦值運算符=的調用:

struct array{

    void* data;

    template<typename S, typename T>
    array& operator= (const map<S, T>& that){ cout << "worked...";  return *this;}

   private:
     array();           //i don't need this
};

我像這樣試駕:

map<int, string> var;
array arr = var;

我收到一個錯誤:

Error: conversion from
'std::map<int, string, std::less<int>, std::allocator<std::pair<const int, string> > >'
to non-scalar type 'array' requested*/ 

問題:到底是什么問題? 如何使這樣的運算符超載? 我的意思是operator= ,它應該將不同類型的對象轉換為自己的類類型。

報關單

map<int, string> var;
array arr = var;

…不調用副本分配運算符。

它使用(或表現為使用)復制構造函數:在聲明=表示復制初始化。

如果該類具有其他構造函數,則可以考慮將var轉換為array實例,然后(除非對此部分進行了優化)將傳遞給復制構造函數。

但是,您只有默認的副本構造函數。


從類型B到類類型A的轉換最好用以下兩種方式之一表示:

  • 通過類A接受B的構造函數。

  • 如果B是類,則通過B operator A (轉換運算符)。


在其他新聞中:

  • void*是一種丟棄類型信息的方法。 丟棄類型信息是一種制造麻煩的方法。 因此,最好避免使用void*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM