這是我的代碼C++錯誤沒有匹配的功能
#include <iostream>
#include <vector>
#include <memory>
#include <tr1/memory>
using namespace std;
class Animal {
public:
string name;
Animal (const std::string& givenName) : name(givenName) {
}
};
class Dog: public Animal {
public:
Dog (const std::string& givenName) : Animal (givenName) {
}
string speak()
{ return "Woof, woof!"; }
};
class Cat: public Animal {
public:
Cat (const std::string& givenName) : Animal (givenName) {
}
string speak()
{ return "Meow..."; }
};
int main() {
vector<Animal> animals;
Dog * skip = new Dog("Skip");
animals.push_back(skip);
animals.push_back(new Cat("Snowball"));
for(int i = 0; i< animals.size(); ++i) {
cout << animals[i]->name << " says: " << animals[i]->speak() << endl;
}
}
這些都是我的錯誤:
index.cpp: In function ‘int main()’:
index.cpp:36: error: no matching function for call to ‘std::vector<Animal, std::allocator<Animal> >::push_back(Dog*&)’
/usr/include/c++/4.2.1/bits/stl_vector.h:600: note: candidates are: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = Animal, _Alloc = std::allocator<Animal>]
index.cpp:37: error: no matching function for call to ‘std::vector<Animal, std::allocator<Animal> >::push_back(Cat*)’
/usr/include/c++/4.2.1/bits/stl_vector.h:600: note: candidates are: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = Animal, _Alloc = std::allocator<Animal>]
index.cpp:40: error: base operand of ‘->’ has non-pointer type ‘Animal’
index.cpp:40: error: base operand of ‘->’ has non-pointer type ‘Animal’
我想要做什麼:
我只想用一個動態的數據結構這將通過可能的動物對象的列表。
我想在C++語法中學習這種多態概念。
我對Java和PHP很熟悉,但對C++來說卻少得多。
更新:
我已經添加了其中一個答案中提到的更改。 http://pastebin.com/9anijwzQ
但我得到有關unique_ptr的錯誤。我已經包含了內存。所以我不確定問題是什麼。
http://pastebin.com/wP6vEVn6是錯誤消息。
我已經添加了所提及的更改。 http://pastebin.com/9anijwzQ但我得到有關unique_ptr的錯誤。但我已經包含了內存。所以我不確定問題是什麼。 http://pastebin.com/wP6vEVn6是錯誤消息。 –
@kimsia我添加了一個例子。 – juanchopanza
謝謝,我幫你解決了這個問題。我想問幾個問題來澄清。我理解需要將std :: string speak()作爲虛擬方法。我不明白你爲什麼讓它= 0; 其次,我不確定虛擬的目的是什麼〜Animal(){} –