NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Arduino IDE nenajde .cpp soubor pro .hpp soubor

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Lukáš Hornych
Tvůrce
Avatar
Lukáš Hornych:21.2.2018 12:54

Ahoj,
vytvářím třídu v C++ pro Arduino, ale nedaří se mi propojit .cpp soubor s .hpp souborem. Hlavičkový soubor mně to najde v pohodě, ale definici metod z hlavičkového souboru v .cpp souboru už to nenajde. Pokud však dám definici metod přímo do hlavičkového souboru za deklaraci nebo pokud .cpp soubor includnu spolu s .hpp soubrem do hlavního kódu, kód se zkompiluje. Nenapadá vás co by to mohlo způsobovat?

Hlavní soubor

#include <Wire.h>
#include <Servo.h>
#include "libraries/DataTypes/DataTypes.hpp"
#include "libraries/SerialBuffer/SerialBuffer.hpp"
// #include "libraries/SerialBuffer/SerialBuffer.cpp" -> pokud připíšu tento řádek tak se kód zkompiluje

#define SERIAL_PORT_BAUDRATE            115200

ReceivedData receivedData;
SerialBuffer serialBuffer;

void setup()
{
    Serial.begin(SERIAL_PORT_BAUDRATE);
}

void loop()
{
    receivedData = serialBuffer.readSerial();
}

Soubor SerialBuffer.hpp

#ifndef __SERIAL_BUFFER_HPP_
#define __SERIAL_BUFFER_HPP_

#ifndef RECEIVED_SERIAL_BUFFER_LENGTH
#define RECEIVED_SERIAL_BUFFER_LENGTH  9
#endif

#include <Arduino.h>

class SerialBuffer
{
    public:
        ReceivedData readSerial();

    private:
        ReceivedData decodeReceivedData(byte data[RECEIVED_SERIAL_BUFFER_LENGTH]);
};

#endif //__SERIAL_BUFFER_HPP_

Soubor SerialBuffer.cpp

#include "SerialBuffer.hpp"

ReceivedData SerialBuffer::readSerial()
{
    byte data[RECEIVED_SERIAL_BUFFER_LENGTH];

    while (Serial.available() >= RECEIVED_SERIAL_BUFFER_LENGTH) {
        for (byte i = 0; i < RECEIVED_SERIAL_BUFFER_LENGTH; i++) {
            data[i] = Serial.read();
        }
    }

    return decodeReceivedData(data);
}

ReceivedData SerialBuffer::decodeReceivedData(byte data[RECEIVED_SERIAL_BUFFER_LENGTH])
{
    ReceivedData receivedData;
    .
    .
    .
    return receivedData;
}

Struktura složek a souborů

hlavniProgram.ino
libraries/
        SerialBuffer/
                SerialBuffer.hpp
                SerialBuffer.cpp
 
Odpovědět
21.2.2018 12:54
Avatar
B42P6
Člen
Avatar
Odpovídá na Lukáš Hornych
B42P6:21.2.2018 16:09

Zdravím,
aký Error, konkréte, kompiler vypisuje?

Inak ako kompiluješ tie 2 súbory? Možno to je tým, že zabúdaš skompilovať SerialBuffer.cpp, a potom to nevie linker nájsť. :-P

Nahoru Odpovědět
21.2.2018 16:09
'long long long' is too long for GCC
Avatar
Lukáš Hornych
Tvůrce
Avatar
Odpovídá na B42P6
Lukáš Hornych:21.2.2018 16:16

Konkrétně používám doplněk od Microsoftu pro Arduino do Visual Studio Code, ale stejnou chybu to hází i přímo v oficiálním Arduino IDE nepracuju přímo s kompilerem.

/tmp/cc4Q4J8w.ltrans0.ltrans.o: In function `main':
cc4Q4J8w.ltrans0.o:(.text.startup+0x254): undefined reference to `SerialBuffer::readSerial()'
collect2: error: ld returned 1 exit status
 
Nahoru Odpovědět
21.2.2018 16:16
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na Lukáš Hornych
ostrozan:21.2.2018 18:06

Někde jsem četl, že Visual Micro nepodporuje .hpp, ale že to budou řešit - zkus to přejmenovat na .h

 
Nahoru Odpovědět
21.2.2018 18:06
Avatar
Lukáš Hornych
Tvůrce
Avatar
Odpovídá na ostrozan
Lukáš Hornych:21.2.2018 18:47

To už jsem zkoušel bohužel nic :-( . Ale nepoužívám Visual Micro.

 
Nahoru Odpovědět
21.2.2018 18:47
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na Lukáš Hornych
ostrozan:21.2.2018 19:04

A můžu vědět, co používáš, já měl za to, že existuje jen to Visual Micro

 
Nahoru Odpovědět
21.2.2018 19:04
Avatar
Lukáš Hornych
Tvůrce
Avatar
Odpovídá na ostrozan
Lukáš Hornych:21.2.2018 19:18

Tak já hlavně používám VS Code a v tom používám https://marketplace.visualstudio.com/items?…. Což používá Arduino IDE takže hádám, že na pozadí se prostě volá Arduino IDE.

 
Nahoru Odpovědět
21.2.2018 19:18
Avatar
B42P6
Člen
Avatar
Odpovídá na Lukáš Hornych
B42P6:21.2.2018 20:09

Skús premenovať priečinok libraries na src. Ak ten doplnok vo VS Code využíva Arduino IDE, tak musia byť ďalšie .cpp a .hpp súbory v priečinku src.
https://forum.arduino.cc/index.php?…

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
21.2.2018 20:09
'long long long' is too long for GCC
Avatar
Lukáš Hornych
Tvůrce
Avatar
Odpovídá na B42P6
Lukáš Hornych:21.2.2018 20:33

Funguje to :-) Nechápu, že jsem na tohle vlákno nenarazil :-D Každopádně díky ;-) .

 
Nahoru Odpovědět
21.2.2018 20:33
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.