ошибка: «функция» не была объявлена ​​в этой области

У меня есть следующая проблема:
ошибка: kleiner не был объявлен в этой области
Мой Профессор сказал мне, что мой код просто отлично работает для него.
Все каталоги включены в параметры bulid (я использую Code :: Blocks).
Может кто-нибудь сказать, пожалуйста, в чем может быть проблема?

main.cpp

#include <iostream>
#include "vector.h"using namespace std;

int main(int argc, char *argv[])
{
Vector v1;
cout << "v1: " << v1 << endl;

Vector v2(8);
cout << "v2: " << v2 << endl;
cout << "Minimum von v2: " << v2.min() << endl;

Vector v3(v2);
cout << "v3: " << v3 << endl;
cout << "Anzahl von v3: " << v3.getAnzahl() << endl;

if ( kleiner( v3[2], v2[5] ) )//<<--<<--<<-- HERE IS THE PROBLEM
cout << v3[2] << " ist kleiner als " << v2[5] << endl;

int arr[5] = { 10, 5, 2, 3, 12 };

Vector v4;
cout << "v4: " << v4 << endl;
v4.setVector( arr, 4 );
cout << "v4 nach set: " << v4 << endl;
cout << "Minimum von v4: " << v4.min() << endl;
cout << "Anzahl von v4: " << v4.getAnzahl() << endl;

return 0;
}

vector.h

#ifndef VECTOR_H
#define VECTOR_H

#include <iostream>
using namespace std;

class Vector
{
int* v;
int anzahl;

public:
Vector(int anzahl = 10);
Vector( const Vector& vec ); // Kopierkonstruktor
~Vector();
friend bool kleiner( const int& a, const int& b );
int min() const;
int getAnzahl() const;
int operator[]( const int i ) const;
void setVector( int* sv, int sanzahl);
friend ostream& operator<< ( ostream& os, const Vector& v );
};

#endif

vector.cpp

#include "vector.h"
Vector::Vector( int a ) : anzahl(a)
{
v = new int[a];
for ( int i = 0; i < a; i++ )
v[i] = i;
}

Vector::Vector( const Vector& vec )
{
anzahl = vec.getAnzahl();
v = new int[anzahl];
for ( int i = 0; i < anzahl; i++ )
v[i] = vec[i];
}

Vector::~Vector()
{
delete[] v;
v = NULL;
}

bool kleiner( const int& a, const int& b )
{
return ( a < b );
}

int Vector::min() const
{
int min = v[0];
for ( int i = 1; i < anzahl; i++ )
{
if ( v[i] < min )
min = v[i];
}
return min;
}

int Vector::getAnzahl() const
{
return anzahl;
}

int Vector::operator[] ( const int i ) const
{
return v[i];
}

void Vector::setVector( int* sv, int sanzahl )
{
delete[] v; // alten Inhalt loeschen
anzahl = sanzahl;
v = new int[anzahl];
for ( int i = 0; i < anzahl; i++ )
v[i] = sv[i];
return;
}

ostream& operator<< ( ostream& os, const Vector& v )
{
for ( int i = 0; i < v.anzahl; i++ )
os << v[i] << ", ";
return os;
}

2

Решение

Объявите функцию вне класса, а также указав в качестве друга.

Ссылка; http://en.cppreference.com/w/cpp/language/friend

Имя, впервые объявленное в объявлении друга в классе или шаблоне класса X, становится членом внутреннего вложенного пространства имен X, но недоступно для поиска (кроме поиска, зависящего от аргумента, который учитывает X), если только соответствующее объявление в области пространства имен не является при условии — см. пространства имен для деталей.

Я думаю, что у вас и вашего профессора разные компиляторы?

6

Другие решения

Объявите дружественную функцию также вне определения класса в заголовке. Он не виден, пока не будет объявлен вне класса.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector