Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » error: no match for call to ‘(Vector) (int&)’

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.05.2016, 21:06 Uhr
~knn
Gast


Hallo,
ich versuche jetzt schon seit längerem herauszufinden warum mein Code nicht funktioniert und bin schön langsam am verzweifeln javascript:insert_smiley('')
Mein Programm bilden folgende drei Dateien:

1.) net.hpp:

C++:
#ifndef NET
#define NET
#include <cmath>
#include <cstdlib>
#include <cassert>

class Net;

class Vector {
private:
int dim;
double* coeff;
public:
Vector();
Vector(int dim);
Vector(int dim, double init);
~Vector();
int getDim();
void set(int k, double value);
double get(int k);
};
class Net {
private:
int inputPixel;
int outputPixel;
int hiddenPixel;
Vector inputSchicht;
Vector hiddenSchicht;
Vector outputSchicht;
public:
Net();
Net(int inputPixel, int outputPixel);
};
#endif



2.) net.cpp:

C++:
#include "net.hpp"
#include <iostream>
#include <cmath>

using std::cout;

Vector::Vector() {
dim = 0;
coeff = NULL;
}
Vector::Vector(int dim) {
int j = 0;
this->dim = dim;
coeff = (double*) malloc(dim*sizeof(double));
for (j=0; j<dim; ++j) {
coeff[j] = 0;
}
}
Vector::Vector(int dim, double init) {
int j = 0;
this->dim = dim;
coeff = (double*) malloc(dim*sizeof(double));
for (j=0; j<dim; ++j) {
coeff[j] = init;
}
}
Vector::~Vector() {
if (dim > 0) {
free(coeff);
}
// just for demonstration purposes
cout << "free vector, length " << dim << "\n";
}
int Vector::getDim() {
return dim;
}
***************************************************************************

void Vector::set(int k, double value) {
assert(k>=0 && k<dim);
coeff[k] = value;
}
double Vector::get(int k) {
assert(k>=0 && k<dim);
return coeff[k];
}
Net::Net() {
inputPixel = 0;
outputPixel = 0;
hiddenPixel = 0;
inputSchicht;
hiddenSchicht;
outputSchicht;

cout << "Default-Net wurde erstellt!" << "\n";
}
Net::Net(int intputPixel, int outputPixel){

this->inputPixel = inputPixel;

cout << "inputPixel: " <<inputPixel << "\n";

this->outputPixel = outputPixel;

inputSchicht(inputPixel);
//outputSchicht(outputPixel);

cout << "Net(" << inputPixel << "," << sqrt(inputPixel) << "x" << sqrt(inputPixel) << "," << inputPixel << ") wurde erstellt!" << "\n";
}


3.) knn.cpp:

C++:
#include "net.hpp"
#include <string>
#include <iostream>
#include <fstream>

using std::cout;
using std::string;

int main() {
Net net1;
Net net2(16,9);

return 0;

}


Die Elemente von net2 sind zwei Vektoren vom Typ Vector mit den Dimensionen 16 und 9. Der Konstruktor von Net soll also zwei mal den Konstruktor von Vector aufrufen und die beiden Vektoren erstellen. Jedoch funktioniert das noch nicht ganz. javascript:insert_smiley('')

Wenn ich die Datei net.cpp mit g++ -c net.cpp compiliere bekomme ich immer folgende Fehlermeldung:

net.cpp: In constructor ‘Net::Net(int, int)’:
net.cpp:145:25: error: no match for call to ‘(Vector) (int&
inputSchicht(inputPixel);
^

Ich habe schon einiges ausprobiert um diesen Fehler zu beheben aber nichts hat funktioniert.
Kann mir bitte jemand weiterhelfen und erklären warum meine Implementierung nicht funktioniert?

Dieser Post wurde am 07.05.2016 um 21:58 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.05.2016, 22:07 Uhr
ao

(Operator)


Die Member inputSchicht, hiddenSchicht und outputSchicht müssen über eine sogenannte Initialisierungsliste initialisiert werden werden. Die int-Member können und sollten nach Möglichkeit ebenfalls über die Initialisierungsliste intialisiert werden, müssen aber nicht. Die Syntax sieht so aus:

C++:
Net::Net(int intputPixel_, int outputPixel_)
: inputPixel (inputPixel_)
, hiddenPixel (0)
, outputPixel (outputPixel_)
, inputSchicht (inputPixel)
, hiddenSchicht (0)
, outputSchicht (outputPixel)
{
// hier kann der ganze Init-Kram weg.

cout << "Net(" << inputPixel << "," << sqrt(inputPixel) << "x" << sqrt(inputPixel) << "," << inputPixel << ") wurde erstellt!" << "\n";
}



An die formalen Parameter des Konstruktors habe ich einen Unterstrich angehängt (inputPixel_), damit er sich von der Membervariablen unterscheidet.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.05.2016, 23:23 Uhr
~knn
Gast


Hallo,
danke für deine Antwort. Ich habe die Initialisierungsleiste gleich ausprobiert:

Net::Net(int intputPixel_, int outputPixel_)
:
inputPixel(inputPixel_),
hiddenPixel (0),
outputPixel(outputPixel_),
inputSchicht(inputPixel),
hiddenSchicht (0),
outputSchicht(outputPixel)
{
//here all member varaibles are already constructed/initialised
cout << "inputPixel: " << inputPixel << "\n";
cout << "Net(" << inputPixel << "," << sqrt(inputPixel) << "x" << sqrt(inputPixel) << "," << inputPixel << ") wurde erstellt!" << "\n";
}

jedoch bekomme ich folgende Fehlermeldung:

net.cpp: In constructor ‘Net::Net(int, int)’:
net.cpp:140:13: error: ‘inputPixel_’ was not declared in this scope
inputPixel(inputPixel_),
^

und wenn ich inputPixel_ wieder zu inputPixel ändere bekomme ich trotz Initialisierungsliste den gleichen output wie zuvor:

inputPixel: 6303184
Net(6303184,2510.61x2510.61,6303184) wurde erstellt!

Muss ich in der net.hpp Datei auch etwas ändern? Weil ich hab nur den Konstruktor von Net in der net.cpp Datei geändert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.05.2016, 08:12 Uhr
Tommix



'Morgen,
Tippfehler:
Net::Net(int intputPixel_, int outputPixel_)

Gruß,
Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.05.2016, 12:59 Uhr
ao

(Operator)


Du hast recht, Tommix, danke.

@knn: Bitte den Tippfehler korrigieren. Es ist wichtig, dass das Member inputPixel mit dem formalen Parameter inputPixel_ initialisiert wird! Die Initialisierung ", inputPixel(inputPixel)" initialisiert das Member mit sich selber. Das ist syntaktisch zwar korrekt, ist aber eine Schein-Initialisierung, die gar nichts bewirkt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: