Am 03.05.22 um 21:51 schrieb Konrad Rosenbaum:
Hi,


warum definierst Du die Struktur csv_values mehrfach? Einmal reicht. Insbesondere die Definition als private Sub-Class in READCSV ist sinnlos.


Einmal in exakt einer Header-Datei deklarieren und diese Datei überall #include'n wo du sie brauchst.


Noch ein Tipp:

der Include-Guard:
#ifndef XX_H
#define XX_H
//...
#endif

...also ich verzähle mich da immer. Das hier ist einfacher:

#pragma once

Du schreibst es ganz an den Anfang der Datei (dort wo Du #ifndef hast) und vergisst den ganzen ifndef/define/endif Kram einfach. Alle modernen Compiler verstehen dieses Pragma - es bedeutet dass der Compiler sicherstellt dass diese Datei nur einmal interpretiert wird, auch wenn sie mehrfach eingebunden wird.



    Konrad

Hallo Konrad,

Danke für den Tipp und die ganzen Hinweise. Ich habe mir nun eine Headerdatei mit der Deklaration erstellt und diese in die Datei mit den eigentlichen Leseroutinen eingefügt. Auch in der Datei mit dem Aufruf der Funktion habe ich die Headerdatei eingefügt. Nun läuft zwar der Compiler durch, aber der Linker wirft einen Fehler:

-------------

make
g++ -g src/zero_controller_SNR.o src/lib/i2c_lcd/lcdDriver.o src/lib/i2c_lcd/i2cControl.o src/lib/display.o src/lib/sensor.o src/lib/read_csv.o src/lib/init_hw.o -o zero_controller_SNR -lpthread -lpigpio -lrt /usr/bin/ld: src/lib/init_hw.o: in function `ZEROHW::init_hw(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha
r> > > > const&)':
init_hw.cpp:(.text+0x60): undefined reference to `READCSV::read_config_files(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<csv_values, std::allocator<csv_values> >&)'
collect2: error: ld returned 1 exit status
make: *** [Makefile:20: all] Fehler 1
-------------

Was ich nicht verstehe ist, warum die Funktion undefiniert ist, wenn ich in der "init_hw.cpp" über die Header-Datei "read_config_files.hpp" diese Funktion und auch die Struktur ja eigentlich definiert haben sollte und der Compiler diese auch kennt/ findet......?

Die fraglichen Teile der Dateien sehen so aus:

-------------init_hw.cpp-------------

#include "../headers/glob_pragma_001.hpp"
#include "../headers/init_hw.hpp"
#include "../headers/read_config_files.hpp"

using namespace std;

void ZEROHW::init_hw(const std::vector<string> &file_names)
{
    READCSV read_csv;
    vector<csv_values> elements;

    if (file_names[3].length() < 0)
        {
           read_csv.read_config_files(file_names[0], elements);
        }

-------------init_hw.cpp-------------

-------------read_csv.cpp-------------

#include "../headers/glob_pragma_001.hpp"

#include "../headers/init_hw.hpp"
#include "../headers/read_config_files.hpp"

using namespace std;

void read_config_files (const std::string& csv_file_name, vector<csv_values> &elements)
{
    ifstream csv_in_file;
-------------read_csv.cpp-------------


-------------read_config_files.hpp-------------

#include "glob_pragma_001.hpp"

using namespace std;
// Define some device parameters
class READCSV
    {
        private:
        public:
            void read_config_files (const std::string& csv_file_name, vector<csv_values> &elements);
    };

-------------read_config_files.hpp-------------


-------------glob_pragma_001.hpp-------------

#pragma once

using namespace std;

struct csv_values {
        string pin_number;
        string in_out_name;
        string in_out_function;
    };

-------------glob_pragma_001.hpp-------------

--
Mit freundlichen Grüßen

Sebastian Reinhardt


LMV
Landmaschinenvertrieb- und Service GmbH
Hauptstrasse 13G
(OT Hartmannsdorf)
01762 Hartmannsdorf- Reichenau

Geschäftsführer:        Sebastian Reinhardt
Amtsgericht:            Dresden
Handelsregisternummer:  HRB 2574
Umsatzsteuer- Identnr.: DE 140461622


Tel:  +49 373 26 1851
Mobil:+49 172 357 3107
Fax:  +49 373 26 86804
Mail: s...@lmv-hartmannsdorf.de
Web:  www.lmv-hartmannsdorf.de



Reply via email to