[英]A vector containing pointers
解決方案:我必須編寫#include "polynomial.h"
,此外,我還必須傳遞P
作為對addPolynomial
的引用。
我有一個名為Function
的類,具有作為成員變量vector<functionSegment*> functionParts
。
functionSegment
有兩個派生類,分別是Polynomial
和Exponential
。
編輯函數addPolynomial
是一個聲明為
void Function::addPolynomial(Polynomial* P, ifstream& input)
在main
,我有以下內容:
Polynomial* P; //I made a constructor that takes no arguments
mainFunction.addPolynomial(P, input); //All that changes is the thing P is pointing to: NOTHING ELSE is changed
(mainFunction.functionParts).push_back(P); //This gives problems
編輯重新檢查addPolynomial
函數后,我意識到第二個注釋並不完全正確: P
確實是new
-ed。 因此,我應該在main
編寫Polynomial* P = new Polynomial
並使用副本構造函數,或者通過引用傳遞P
我選擇了后者。
錯誤是:
no matching function for call to 'std::vector<functionSegment*>::push_back(Polynomial*&)'
candidates are:
void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = functionSegment*; _Alloc = std::allocator<functionSegment*>; std::vector<_Tp, _Alloc>::value_type = functionSegment*]|
no known conversion from argument 1 from 'Polynomial*' to 'functionSegment* const&'
因此,顯然, push_back
一個functionSegment* const&
,但它接收一個Polynomial*
。 由於Polynomial
是functionSegment
類型,因此問題在於我們需要const*& Polynomial
。 這是有道理的,因為它效率更高。 但是接下來我該怎么辦? P
是指向多項式對象的指針,因此我們需要對指針的引用。
(mainFunction.functionParts).push_back(&P)
不起作用。
首先是Polynomial* P;
必須是Polynomial* P = new Polynomial;
除非addPolynomial
將P作為Polynomial *&
並分配new
ed Polynomial
。
現在問這個問題。 您或者忘記了從functionSegment
公開繼承,或者忘記了包含標頭,並且已經向前聲明了類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.