Compilerfehler unter CodeBlocks

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Compilerfehler unter CodeBlocks

Beitrag von Bebu » Mi Feb 17, 2010 5:24 pm

Hallo zusammen, ich stehe hier mal wieder vor einem Fehler, den ich nicht ganz verstehen kann. Ich habe zu meinem laufenden Projekt wieder zwei Quellcodedateien hinzugefügt. Diesmal ist es aber keine Klasse sondern eine Sammlung von Funktionen, die den eigentlichen Algorithmus bilden soll. In der Headerdatei sind bisher zwei Funktionen definiert. Diese beiden Funktionen arbeiten mit einigen anderen Klassen aus meinem Projekt, allerdings bekomme ich immer die Fehlermeldung, eines meiner Objekte wäre innerhalb des Scopes nicht deklariert. Sie stehen aber im Header. Wenn ich die Headerdatei weglasse und alles über main definiere klappt es, sobald ich die Headerdatei benutzte spinnt er rum. Es ist grade so, als ob er die eine Headerdatei nicht haben will.

Hat jemand eine Idee? Die betreffenden Dateien heißen list_generator.hpp und list_generator.cpp. Das komplette Packet ist als CodeBlocks Projekt im Dateianhang dabei.

Diese beiden Dateien befinden sich noch im Aufbau und die Funktion enthält den eigenlichen Algorithmus noch gar nicht, also nicht wundern...

Danke im voraus

Bebu
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Compilerfehler unter CodeBlocks

Beitrag von cloidnerux » Mi Feb 17, 2010 5:38 pm

Kann es sein, das du ein Objekt aus einer weitren Klasse verwendest, deren Headerdatei du nicht einbindest?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Compilerfehler unter CodeBlocks

Beitrag von Xin » Mi Feb 17, 2010 6:29 pm

Ich habe Boost nicht installiert. Da Du die Fehlermeldung nicht explizit aufführst, kann ich auch nicht so reingucken.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Compilerfehler unter CodeBlocks

Beitrag von Bebu » Fr Feb 19, 2010 2:15 am

cloidnerux hat geschrieben:Kann es sein, das du ein Objekt aus einer weitren Klasse verwendest, deren Headerdatei du nicht einbindest?
Das ist ja genau das Problem. Er meckert, obwohl die Klasse in der Headerdatei meiner Funktionsammlung per Include eingebunden ist.
Xin hat geschrieben:Ich habe Boost nicht installiert. Da Du die Fehlermeldung nicht explizit aufführst, kann ich auch nicht so reingucken.
OK, hier die exakte Fehlermeldung:

||=== Anlage, Debug ===|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp||In function ‘int generate_list(boost::gregorian::date, int, int, int)’:|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp|31|error: ‘list’ was not declared in this scope|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp|31|error: expected ‘;’ before ‘list_’|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp|32|error: ‘inserts’ was not declared in this scope|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp|32|error: expected ‘;’ before ‘row’|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp|123|error: ‘row’ was not declared in this scope|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp|129|error: ‘list_’ was not declared in this scope|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp|132|error: ‘list_’ was not declared in this scope|
/home/bernhard/Programmieren/BOOST_LIB/boost_1_41_0/boost/system/error_code.hpp|208|warning: ‘boost::system::system_category’ defined but not used|
/home/bernhard/Programmieren/BOOST_LIB/boost_1_41_0/boost/system/error_code.hpp|209|warning: ‘boost::system::generic_category’ defined but not used|
/home/bernhard/Programmieren/BOOST_LIB/boost_1_41_0/boost/system/error_code.hpp|214|warning: ‘boost::system::posix_category’ defined but not used|
/home/bernhard/Programmieren/BOOST_LIB/boost_1_41_0/boost/system/error_code.hpp|215|warning: ‘boost::system::errno_ecat’ defined but not used|
/home/bernhard/Programmieren/BOOST_LIB/boost_1_41_0/boost/system/error_code.hpp|216|warning: ‘boost::system::native_ecat’ defined but not used|
||=== Erstellen beendet: 7 Fehler, 5 Warnungen===|

Allerdings sagt das auch nicht viel aus. Lasse ich die Headerdatei ganz weg, schreibe die Funktionsdefinitionen und die Includes in main, kompiliert es problemlos.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Compilerfehler unter CodeBlocks

Beitrag von Xin » Fr Feb 19, 2010 12:07 pm

Bebu hat geschrieben:
Xin hat geschrieben:Ich habe Boost nicht installiert. Da Du die Fehlermeldung nicht explizit aufführst, kann ich auch nicht so reingucken.
OK, hier die exakte Fehlermeldung:

||=== Anlage, Debug ===|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp||In function ‘int generate_list(boost::gregorian::date, int, int, int)’:|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp|31|error: ‘list’ was not declared in this scope|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp|31|error: expected ‘;’ before ‘list_’|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp|32|error: ‘inserts’ was not declared in this scope|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp|32|error: expected ‘;’ before ‘row’|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp|123|error: ‘row’ was not declared in this scope|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp|129|error: ‘list_’ was not declared in this scope|
/home/bernhard/Programmieren/AnlageV2/Anlage/list_generator.cpp|132|error: ‘list_’ was not declared in this scope|
Klingt für mich, als würdest Du eine Variable 'list' verwenden, deren Typ nicht bekannt ist und die deswegen nicht deklariert werden konnte.
Bebu hat geschrieben:/home/bernhard/Programmieren/BOOST_LIB/boost_1_41_0/boost/system/error_code.hpp|208|warning: ‘boost::system::system_category’ defined but not used|
/home/bernhard/Programmieren/BOOST_LIB/boost_1_41_0/boost/system/error_code.hpp|209|warning: ‘boost::system::generic_category’ defined but not used|
/home/bernhard/Programmieren/BOOST_LIB/boost_1_41_0/boost/system/error_code.hpp|214|warning: ‘boost::system::posix_category’ defined but not used|
/home/bernhard/Programmieren/BOOST_LIB/boost_1_41_0/boost/system/error_code.hpp|215|warning: ‘boost::system::errno_ecat’ defined but not used|
/home/bernhard/Programmieren/BOOST_LIB/boost_1_41_0/boost/system/error_code.hpp|216|warning: ‘boost::system::native_ecat’ defined but not used|
||=== Erstellen beendet: 7 Fehler, 5 Warnungen===|
Klingt für mich, als wären hier Variablen überflüssig definiert.
Bebu hat geschrieben:Allerdings sagt das auch nicht viel aus. Lasse ich die Headerdatei ganz weg, schreibe die Funktionsdefinitionen und die Includes in main, kompiliert es problemlos.
Moment... Funktionsdefinitionen in Includes?
Funktionsdefinitionen haben in Includes nichts zu suchen (Du meinst Deklarationen?)

Ansonsten poste mal Deine Inkludedatei.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Compilerfehler unter CodeBlocks

Beitrag von Bebu » Fr Feb 19, 2010 3:46 pm

Xin hat geschrieben: Klingt für mich, als wären hier Variablen überflüssig definiert.
Die Warnungen kommen immer nur im Fall eines Kompilerfehlers, normalerweise treten die nicht auf. Ich vermute, es liegt daran, das die Boost Bestandteile erst nach dem Fehler benutzt werden und deswegen die Warnungen auftauchen. Darüber mache ich mir Sorgen, wenn sie im Release Kompilat wieder auftauchen ;)
Xin hat geschrieben: Moment... Funktionsdefinitionen in Includes?
Funktionsdefinitionen haben in Includes nichts zu suchen (Du meinst Deklarationen?)

Ansonsten poste mal Deine Inkludedatei.
Ich glaube ich habe mich hier etwas missverständlich ausgedrückt. Aber wie du befiehlst o großer Meister:

Headerdatei mit Funktionsdeklarationen(list_generator.hpp):

Code: Alles auswählen

#ifndef LIST_GENERATOR_HPP_INCLUDED
#define LIST_GENERATOR_HPP_INCLUDED

#include "list.hpp"
#include "sqlitewrapper.hpp"
#include "timer.hpp"
#include "person.hpp"
#include <boost/date_time/gregorian/gregorian.hpp>

int generate_list(boost::gregorian::date start_date,
                  int length,
                  int day1,
                  int day2);

void get_weekdays(boost::gregorian::day_iterator iter,
                  boost::gregorian::date &return_date,
                  int day);


#endif // LIST_GENERATOR_HPP_INCLUDED
Hier die Funktionsdefinitionen(list_generator.cpp):

Code: Alles auswählen

#include "list_generator.hpp"


int generate_list(boost::gregorian::date start_date, int length, int day1, int day2)
{
    //full priority but not a jumper
    std::vector<std::string> mixer;
    std::vector<std::string> stage;
    std::vector<std::string> door;
    std::vector<std::string> micro;

    //full priority but a jumper
    std::vector<std::string> jumper_mixer;
    std::vector<std::string> jumper_stage;
    std::vector<std::string> jumper_door;
    std::vector<std::string> jumper_micro;

    //half priority but not a jumper
    std::vector<std::string> low_prio_mixer;
    std::vector<std::string> low_prio_stage;
    std::vector<std::string> low_prio_door;
    std::vector<std::string> low_prio_micro;

    //waiting lists for half priortity persons
    std::vector<std::string> waiting_mixer;
    std::vector<std::string> waiting_stage;
    std::vector<std::string> waiting_door;
    std::vector<std::string> waiting_micro;

    //used objects an iterators
    list list_;
    inserts row;
    sqlite dbs("dbs.db");
    sqlite::Result sql_returning;
    sqlite::Row sql_row;
    sqlite::Row_it iter_row;

    //variables to work with
    int mixer_,door_,micro_,stage_,priority_;
    std::string name_, firstname_, complete_name;


    sql_returning = dbs.select("persons","active=1");


    //pushing everything in the correct container
    for(sqlite::Result::const_iterator iter=sql_returning.begin();
                                       iter!=sql_returning.end();iter++)
    {
        sql_row = *iter;

        iter_row = sql_row.find("name");
        name_ = dbs.return_values<std::string>(iter_row->second);

        iter_row = sql_row.find("firstname");
        firstname_ = dbs.return_values<std::string>(iter_row->second);

        complete_name = name_ + " " + firstname_;

        iter_row = sql_row.find("mixer");
        mixer_ = dbs.return_values<int>(iter_row->second);

        iter_row = sql_row.find("door");
        door_ = dbs.return_values<int>(iter_row->second);

        iter_row = sql_row.find("stage");
        stage_ = dbs.return_values<int>(iter_row->second);

        iter_row = sql_row.find("micro");
        micro_ = dbs.return_values<int>(iter_row->second);

        iter_row = sql_row.find("priority");
        priority_ = dbs.return_values<int>(iter_row->second);

        if (mixer_ == TRUE && priority_ == FULL)
                                        mixer.push_back(complete_name);
        if (door_  == TRUE && priority_ == FULL)
                                        door.push_back(complete_name);
        if (stage_ == TRUE && priority_ == FULL)
                                        stage.push_back(complete_name);
        if (micro_ == TRUE && priority_ == FULL)
                                        micro.push_back(complete_name);


        if (mixer_ == JUMPER && priority_ == FULL)
                                        jumper_mixer.push_back(complete_name);
        if (door_  == JUMPER && priority_ == FULL)
                                        jumper_door .push_back(complete_name);
        if (stage_ == JUMPER && priority_ == FULL)
                                        jumper_stage.push_back(complete_name);
        if (micro_ == JUMPER && priority_ == FULL)
                                        jumper_micro.push_back(complete_name);


        if (mixer_ == TRUE && priority_ == HALF)
                                      low_prio_mixer.push_back(complete_name);
        if (door_  == TRUE && priority_ == HALF)
                                      low_prio_door.push_back(complete_name);
        if (stage_ == TRUE && priority_ == HALF)
                                      low_prio_stage.push_back(complete_name);
        if (micro_ == TRUE && priority_ == HALF)
                                      low_prio_micro.push_back(complete_name);
    }

    boost::gregorian::date day_1, day_2;

    boost::gregorian::day_iterator start_date_it(start_date);
    boost::gregorian::week_iterator day_1_it (day_1);
    boost::gregorian::week_iterator day_2_it (day_2);

    get_weekdays(start_date_it,day_1,day1);
    get_weekdays(start_date_it,day_2,day2);




    for (int i = 1; i <= length; i++)
    {
        std::cout << start_date.day_of_week() << start_date << std::endl;
        std::cout << day_1.day_of_week() << day_1 << std::endl;
        std::cout << day_2.day_of_week() << day_2 << std::endl;
        //row.date = ;
        row.micro_middle = "mitte";
        row.micro_right = "rechts";
        row.mixer = "anlage";
        row.stage = "buehne";
        row.door = "tuer";

        list_.add_row(row);

    }
    list_.print_list();

    //pushing everything in list object


    return 0;
}

void get_weekdays(boost::gregorian::day_iterator iter,
                  boost::gregorian::date &return_date,
                  int day)
{
    switch (day)
    {
        case MONDAY    : return_date = boost::date_time::next_weekday(*iter,
                                       boost::gregorian::greg_weekday(
                                       boost::date_time::Monday));
                         break;
        case TUESDAY   : return_date = boost::date_time::next_weekday(*iter,
                                       boost::gregorian::greg_weekday(
                                       boost::date_time::Tuesday));
                         break;
        case WEDNESDAY : return_date = boost::date_time::next_weekday(*iter,
                                       boost::gregorian::greg_weekday(
                                       boost::date_time::Wednesday));
                         break;
        case THURSDAY  : return_date = boost::date_time::next_weekday(*iter,
                                       boost::gregorian::greg_weekday(
                                       boost::date_time::Thursday));
                         break;
        case FRIDAY    : return_date = boost::date_time::next_weekday(*iter,
                                       boost::gregorian::greg_weekday(
                                       boost::date_time::Friday));
                         break;
        case SATURDAY  : return_date = boost::date_time::next_weekday(*iter,
                                       boost::gregorian::greg_weekday(
                                       boost::date_time::Saturday));
                         break;
        case SUNDAY    : return_date = boost::date_time::next_weekday(*iter,
                                       boost::gregorian::greg_weekday(
                                       boost::date_time::Sunday));
                         break;
        default        : throw std::out_of_range("Not a week day");
    }
}

Hier die Headerdatei, in der List deklariert ist(list.hpp):

Code: Alles auswählen

#ifndef LIST_GENERATOR_HPP_INCLUDED
#define LIST_GENERATOR_HPP_INCLUDED

#include <string>
#include <stdexcept>
#include <vector>
#include <boost/date_time/gregorian/gregorian.hpp>
#include "logfile.hpp"
struct inserts
{
    std::string date;
    std::string mixer;
    std::string stage;
    std::string micro_right;
    std::string micro_middle;
    std::string door;
};

class list
{

public:
    list() : log("log/list.txt",1,MB) {}

    int add_row(const inserts &value);                                 //tested
    int print_list(); //temporary until wx Printing is runing          //tested

private:

    std::vector<inserts> _list_;
    logfile log;
};

#endif // LIST_GENERATOR_HPP_INCLUDED
Ich habe nichts anders gemacht, als mit sämtlichen anderen Code den ich bisher produziert habe, darum ist mir der Fehler hier so unerklärlich. Kann es sein, das ich mir einfach nur die Projektdatei irgendwie zerschossen habe?
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Compilerfehler unter CodeBlocks

Beitrag von cloidnerux » Fr Feb 19, 2010 3:49 pm

Code: Alles auswählen

#ifndef LIST_GENERATOR_HPP_INCLUDED
#define LIST_GENERATOR_HPP_INCLUDED
Das hast du bei BEIDEN Dateinen, also list generator und list oben hin geschrieben, damit hast du immer eine Header ausgeklammert.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Compilerfehler unter CodeBlocks

Beitrag von Bebu » Fr Feb 19, 2010 3:53 pm

Ich Dussel habe grade den Fehler gefunden!

Here it comes: list.hpp und list_generator.hpp hatten die selben Präprozessor Anweisungen, um ein doppeltes Einkopieren des Headers zu vermeiden. Ich hatte eine der Dateien in der Vergangenheit umbenannt und den Schalternamen nicht mit angepasst.

Asche auf mein Haupt, immer diese dummen Kleinigkeiten.

Danke für eure Hilfe

Edit: cloidnerux du hast recht, als ich den Beitrag grade nochmal durchgesehen habe, ist mir das selbe aufgefallen. Ja das sind die Fallen, die in IDEs stecken :oops:
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Compilerfehler unter CodeBlocks

Beitrag von Xin » Fr Feb 19, 2010 4:31 pm

Bebu hat geschrieben:Ich Dussel habe grade den Fehler gefunden!

Here it comes: list.hpp und list_generator.hpp hatten die selben Präprozessor Anweisungen, um ein doppeltes Einkopieren des Headers zu vermeiden.
Herzlich willkommen im Club. ;-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten