2015-04-25 2 views
-2

Ok Я обновил код:C++ неожиданные ошибки синтаксиса

#ifndef VECTOR_H 
#define VECTOR_H 
#include<cstdlib> 
#include<vector> 
#include<iostream> 
using namespace std; 
template < typename T> 
class MyClass 
{ 
public: 
    MyClass() : size(10), index(0) { vec = new T[10]; }; 
    MyClass(int i) : size(i), index(0) { vec = new T[i]; }; 
    friend bool Add(T i); 
    virtual ~MyClass(); 
    friend ostream& operator<<(ostream& out, const T& obj); 

private: 
    T * vec; 
    int size; 
    int index; 
}; 
template <typename T> 
virtual MyClass<T>::~MyClass() 
{ 
    delete[] vec; 
} 
template <typename T> 
ostream& operator<<(ostream& out, const MyClass<T>& obj){ 
    for (int i = 0; i < index; ++i) 
     out << obj[i] << " "; 
    out << endl; 
} 
template <typename T> 
bool MyClass<T>::Add(T i){ 
    if (size == index){ 
     size *= 2; 
     realloc(vec, size); 
    } 
    vec[index++] = i; 
} 
#endif // !VECTOR_H 

Список ошибок: Ошибка 1 Ошибка C2039: 'добавить': не является членом с 'MyClass': \ Пользователи \ mihaibogdan \ документы \ Visual Studio 2013 \ Projects \ dashit \ dashit \ header.h 41

+0

Попробуйте использовать 'std :: ostream &' вместо 'ostream &'. – phantom

+2

Прежде всего, * какие ошибки вы получаете? Измените свой вопрос, чтобы включить полный и неотредактированный журнал ошибок. Во-вторых, какая строка - строка 13? Пожалуйста, отметьте это каким-то образом, как комментарий или что-то еще. –

+0

Возможно, вам понравятся [ошибки Клэнга] (http://coliru.stacked-crooked.com/a/072554d676124b1b) лучше. С другой стороны, здесь имеется масса ошибок. – chris

ответ

2

Вы должны использовать квалифицированные имена

friend std::ostream& operator<<(std::ostream& out, const T& obj); 

Standard C++ имена объявляются в пространстве имен std.

В противном случае компилятор ищет неквалифицированное имя ostream в глобальном пространстве имен, где оно, конечно, не объявлено.

Смежные вопросы