Re: Rückgabe von mehrdimensionalem String in C++

Sebastian Reinhardt <[email protected]>
Newsgroups gmane.user-groups.linux.dresden
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.