Классы

knf

#include "stdafx.h"
#include <iostream>
using namespace std;
 
class Animal{
public:
  virtual string voice() = 0;
  void print();
};
 
class Cat: public Animal {
public:
  string voice(){return "Мяу!";}
};
 
class Dog: public Animal {
public:
  string voice(){return "Гав!";}
};
 
void printVoice(Animal *animal){
  cout << animal->voice(); 
}
 
void Animal::print(){
    cout<<"LOL";
}
int main()
{
    Animal *animal11=new Cat;
    Animal *animal22=new Dog;
    Animal *an;
    /*an->print();*/
    printVoice(animal11);
    printVoice(animal22);
 
    delete animal11;
    delete animal22;
    system("pause");
    return 0;
}
Ругается тут на <<
cout << animal->voice();
Почему ?
4 ответа

knf

Потому что надо подключить библиотеку string, в которой описан оператор вывода типа std::string.
#include <string>


knf

Потому что надо подключить библиотеку string, в которой описан оператор вывода типа std::string.
Кстати, почему так? Т.к. использовать сам std::string можно без подключения , например:
cout << s.c_str();
Проверял в VS2012.


knf

Это зависит от конкретной реализации STL библиотек и порядка их включения друг в друга.


knf

lemegeton, ну я бы понял когда, скажем, включает в себя . Интересно почему такая "половинчатость": тип есть, а вывода нет.