[Solved][C++] Błąd kompilacji

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
PeeR
Sędziwy Jeż
Sędziwy Jeż
Posty: 52
Rejestracja: 09 lut 2009, 18:57
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86
Kontakt:

[Solved][C++] Błąd kompilacji

Post autor: PeeR »

Witam
Nie kompiluje mi się i nie wiem dlaczego.

fanntraining.h

Kod: Zaznacz cały

#ifndef FANNTRAINING_H
#define FANNTRAINING_H

#include "fann.h"

class FannTraining
{
public:
    FannTraining(unsigned int num_input = 26, unsigned int num_output = 3,
                 unsigned int num_layers = 3, unsigned int num_neurons_hidden = 3,
                 float desired_error = 0.001,
                 unsigned int max_epochs = 500000,
                 unsigned int epochs_between_reports = 1000);

    ~FannTraining();

    /*** Set parameters ***/
    void setNumImput(unsigned int num_input);
    void setNumOutput(unsigned int num_output);
    void setNumLayers(unsigned int num_layers);
    void setNumNeuronsHidden(unsigned int num_neurons_hidden);
    void setDesiredError(float desired_error);
    void setMaxEpochs(unsigned int max_epochs);
    void setEpochsBetweenReports(unsigned int epochs_between_reports);


    /*** Get parameters ***/
    unsigned int getNumImput();
    unsigned int getNumOutput();
    unsigned int getNumLayers();
    unsigned int getNumNeuronsHidden();
    float getDesiredError();
    unsigned int getMaxEpochs();
    unsigned int getEpochsBetweenReports();

    void trainFannFromFile(char *fileName);
    void saveNeuralNetwork(char *fileName = "language_classify.net");

private:
    unsigned int num_input;
    unsigned int num_output;
    unsigned int num_layers;
    unsigned int num_neurons_hidden;
    float desired_error;
    unsigned int max_epochs;
    unsigned int epochs_between_reports;

    struct fann *ann;
};

#endif // FANNTRAINING_H

fanntraining.cpp

Kod: Zaznacz cały

#include "fanntraining.h"

FannTraining::FannTraining(unsigned int num_input /*= 26*/, unsigned int num_output /*= 3*/,
                           unsigned int num_layers /*= 3*/, unsigned int num_neurons_hidden /*= 3*/,
                           float desired_error /*= 0.001*/,
                           unsigned int max_epochs /*= 500000*/,
                           unsigned int epochs_between_reports /*= 1000*/)
{
    this->num_input = num_input;
    this->num_output = num_output;
    this->num_layers = num_layers;
    this->num_neurons_hidden = num_neurons_hidden;
    this->desired_error = desired_error;
    this->max_epochs = max_epochs;
    this->epochs_between_reports = epochs_between_reports;
}

FannTraining::~FannTraining()
{
    fann_destroy(ann);
}

/*** Set parameters ***/
void FannTraining::setNumImput(unsigned int num_input)
{
    this->num_input = num_input;
}

void FannTraining::setNumOutput(unsigned int num_output)
{
    this->num_output = num_output;
}

void FannTraining::setNumLayers(unsigned int num_layers)
{
    this->num_layers = num_layers;
}

void FannTraining::setNumNeuronsHidden(unsigned int num_neurons_hidden)
{
    this->num_neurons_hidden = num_neurons_hidden;
}

void FannTraining::setDesiredError(float desired_error)
{
    this->desired_error = desired_error;
}

void FannTraining::setMaxEpochs(unsigned int max_epochs)
{
    this->max_epochs = max_epochs;
}

void FannTraining::setEpochsBetweenReports(unsigned int epochs_between_reports)
{
    this->epochs_between_reports = epochs_between_reports;
}


/*** Get parameters ***/
unsigned int FannTraining::getNumImput()
{
    return num_input;
}

unsigned int FannTraining::getNumOutput()
{
    return num_output;
}

unsigned int FannTraining::getNumLayers()
{
    return num_layers;
}

unsigned int FannTraining::getNumNeuronsHidden()
{
    return num_neurons_hidden;
}

float FannTraining::getDesiredError()
{
    return desired_error;
}

unsigned int FannTraining::getMaxEpochs()
{
    return max_epochs;
}

unsigned int FannTraining::getEpochsBetweenReports()
{
    return epochs_between_reports;
}


/*Trenning Neural Network*/
void FannTraining::trainFannFromFile(char *fileName)
{
    ann = fann_create_standard(num_layers, num_input,
                                            num_neurons_hidden, num_output);

    fann_set_activation_function_hidden(ann, FANN_SIGMOID_SYMMETRIC);
    fann_set_activation_function_output(ann, FANN_SIGMOID_SYMMETRIC);

    fann_train_on_file(ann, fileName, max_epochs, epochs_between_reports, desired_error);

}

void FannTraining::saveNeuralNetwork(char *fileName /*= "language_classify.net"*/)
{
   fann_save(ann, fileName);
}

main.cpp

Kod: Zaznacz cały

#include "fanntraining.h"

int main()
{
  FannTraining fannTrain();
  fannTrain.trainFannFromFile("frequencies.train");
  
}
Kompiluje najpierw:

Kod: Zaznacz cały

g++ -c -Wall fanntraining.cpp -lfann
Potem:

Kod: Zaznacz cały

g++ -c -Wall main.cpp -lfann
i wtedy wywala błąd:

Kod: Zaznacz cały

main.cpp: In function ‘int main()’:
main.cpp:6:13: error: request for member ‘trainFannFromFile’ in ‘fannTrain’, which is of non-class type ‘FannTraining()’
A dobra tematu nie było :razz:
Trzeba było stworzyć wskaźnik a nie obiekt :rolleyes:
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Re: [Solved][C++] Błąd kompilacji

Post autor: beluosus »

Może być obiekt, ale Ty lokalnie zadeklarowałeś funkcję fannTrain zwracającą typ FannTraining. Kod działający zgodnie z zamierzeniem:

Kod: Zaznacz cały

int main()
{
  FannTraining fannTrain;
  fannTrain.trainFannFromFile("frequencies.train");
  
}
Jeśli nie wierzysz to we wcześniejszym kodzie wywołaj funkcję fannTrain(), powinien wyskoczyć błąd linkera, bo nigdzie nie masz definicji tejże funkcji.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 14 gości