C++ - Fehler: 'Funktion' wurde nicht deklariert, in diesem Umfang
Habe ich Folgendes Problem:
Fehler: 'kleiner' war nicht deklariert, in diesem Umfang
Mein Professor sagte mir, dass mein code funktioniert einfach gut für ihn.
Die Verzeichnisse sind alle im bulid-Optionen (ich bin mit Code::Blocks).
Kann mir bitte jemand sagen, was das problem sein könnte?
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;
}
Vektor.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;
}
Nicht setzen using-Direktiven in Headerdateien. Niemand will gezwungen sein, um zu bringen, extra Zeug wenn Sie auch einen header. Auch, wenn jemand ordnet einem Vektor zu einem anderen, das geht, um am Ende sehr schlecht.
Nur ein Hilfs-Kommentar: Verwendung der englischen Sprache für die Programmierung und vermischen Sie nicht Dinge. Ich habe gesehen, diese Mischung aus Deutsch/Englisch mit meinem alten Arbeitgeber und, nachdem Sie beschlossen, die Zusammenarbeit mit einem ausländischen Unternehmen niemand war in der Lage, um den code zu verstehen.
Nur ein Hilfs-Kommentar: Verwendung der englischen Sprache für die Programmierung und vermischen Sie nicht Dinge. Ich habe gesehen, diese Mischung aus Deutsch/Englisch mit meinem alten Arbeitgeber und, nachdem Sie beschlossen, die Zusammenarbeit mit einem ausländischen Unternehmen niemand war in der Lage, um den code zu verstehen.
InformationsquelleAutor honiahaka10 | 2014-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erklären die Funktion außerhalb der Klasse als auch angeben, wie ein Freund.
Referenz; http://en.cppreference.com/w/cpp/language/friend
Ich denke, dass Sie und Ihr Professor haben verschiedene Compiler?
Die version ist er mit arbeiten? Wenn es eine frühere version, ist es wahrscheinlich, dass es nicht zu konform.
Im Grunde kopieren Sie die Deklaration der Funktion (ohne das friend-Schlüsselwort) zu, die außerhalb der Klasse, vielleicht oben.
bool kleiner( const int& a, const int& b );
danke, das funktioniert! 🙂
Als Abschied Ratschlag, immer versuchen, überprüfen Sie code mit moderne compiler, wie Sie können, es hilft wirklich zu halten, der code sauberer und klarer.
InformationsquelleAutor Niall
Erklären die friend-Funktion auch außerhalb der Klassendefinition im header. Es ist nicht visiable, bis es erklärt wird, außerhalb der Klasse.
InformationsquelleAutor Vlad from Moscow