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: [email protected]
Web: www.lmv-hartmannsdorf.de