ошибка g++ “undefined reference to ” [дубликат]

143
08 декабря 2019, 21:20
This question already has answers here:
Ссылка на неразрешенный внешний символ (возможные причины) (2 ответа)
Closed 9 месяцев назад.

Возникает ошибка при компиляции в g++. Строки из Makefile:

generation: generation.cpp source.hpp source.cpp
g++ -o generation generation.cpp sens.cpp

Ошибка следующая:

/tmp/ccosdWFb.o: In function `main':
generation.cpp:(.text+0x284): undefined reference to `SensorData::generateMesuares()'
generation.cpp:(.text+0x2db): undefined reference to `Sensor::setModel()'
generation.cpp:(.text+0x2f1): undefined reference to `Sensor::setCoordinates()'
generation.cpp:(.text+0x307): undefined reference to `Sensor::setDate()'
generation.cpp:(.text+0x31d): undefined reference to `SensorData::generateMesuares()'
generation.cpp:(.text+0x420): undefined reference to `SensorData::choiceTime()'
generation.cpp:(.text+0x44c): undefined reference to `SensorData::choiceTime()'
/tmp/ccosdWFb.o: In function `SensorData::SensorData()':
generation.cpp:(.text._ZN10SensorDataC2Ev[_ZN10SensorDataC5Ev]+0x15): undefined reference to `Sensor::Sensor()'
collect2: error: ld returned 1 exit status
make: *** [generation] Error 1

Если имеющиеся 3 файла объединить в один, то всё работает!!

g++ -o generation generation.cpp

В чем же проблема??? Что я делаю не так??

3 файла с кодом прилагаю.

// ***** generation.cpp *****
#include <ctime> // time_t
#include <cstdio> // sprintf
#include <iostream> //cin cout
#include <cstdlib> // exit success
#include "source.hpp"
using namespace std;
int main (int argc, char* argv[])
{
    return EXIT_SUCCESS;
}
    // *****source.hpp
#ifndef SOURCE_HPP
#define SOURCE_HPP
#include <ctime> // time_t
#include <vector> // vector
#include <string> // string
using namespace std;
struct Coordinate
{
    Coordinate(int form); // form=0 (широта), form!=0 (долгота),
    int type; // тип координаты (широта=0, долгота=1)
    int partOfWorld; // (+)N (-)S (+)E (-)W
    int degrees; // градусы
    int minutes; // минуты
    int seconds; // секунды
    void set();
    int conversion();
};
class Measures
{
public:
    Measures();
    Measures(time_t timeAndDate, float temperatureMeasure, float humidityMeasure);
    void getMeasures();
    time_t dateAndTime;
    float temperature;
    float humidity;
};
class Sensor
{
public:
    Sensor();
    Sensor(const char *str, time_t timeAndDate, int latLocation,
    int longLocation);
    void setModel();
    void setCoordinates();
    time_t conversionTime();
    void setDate();
    void getInfo();
    time_t getInstallDate();
private:
    string model; // модель
    int latitude; // место установки широта, секунды
    int longitude; // место установки долгота, секунды
    time_t installationDate; // дата установки
};
class SensorData : public Sensor
{
public:
    SensorData(){};
    SensorData(const char *str, time_t timeAndDate, int latLocation,
    int longLocation) : Sensor(str, timeAndDate, latLocation, longLocation){};
    vector<Measures> measures_;
    void generateMesuares();
    vector<Measures>::iterator searchIterator(Measures *startPtr,
    time_t timeLimit);
    //выбор времени из диапазона времени измерений
    time_t choiceTime();
    vector<Measures>::iterator searchIterator(vector<Measures>::iterator p,
    time_t timeLimit);
    //печатаем максимальное T и H за указанный период
    void getMaxMeasure(time_t timeBegin, time_t timeEnd);
    //печатаем минимальное T и H за указанный период
    void getMinMeasure(time_t timeBegin, time_t timeEnd);
    //печатаем среднее T и H за указанный период
    void getMiddleMeasure(time_t timeBegin, time_t timeEnd);
};
#endif // SOURCE_HPP
// *****source.cpp
#include <ctime> // struct tm, time_t, mktime, time, localtime, ctime
#include <vector> // vector
#include <iostream> // cin, cout
#include <iomanip> // << setup
#include <string> // string
#include "source.hpp"
using namespace std;

// struct Coordinate
Coordinate::Coordinate(int form)
{
 //   
}
// class Measures
Measures::Measures()
{

// }

// class Sensor
Sensor::Sensor()
{
 //  
}
SensorData:: SensorData()
{
 //   
}

Как правильно собрать проект?

Answer 1

Действительно, ответ прост. Как сказал VTT - не все файлы собираю. В строке G++ ошибка - указан файл sens.cpp вместо требуемого source.cpp.

READ ALSO
Почему вторая итерация для запроса к серверу ошибочна?

Почему вторая итерация для запроса к серверу ошибочна?

Цикл выпоняется 1 раз, я получаю html-тело страницыНа вторую итерацию сервер не отправляет мне ничего (received == 0)

100
OSG не работает с GDAL на Windows 10

OSG не работает с GDAL на Windows 10

Работаю на Windows 10 x64 IDE: QtCreator 48

134
Для чего нужен static_cast, как он работает и где его применяют?

Для чего нужен static_cast, как он работает и где его применяют?

Для чего нужен static_cast, как он работает и где его применяют?

150
Изменть стиль, размер и тип шрифта в Qt

Изменть стиль, размер и тип шрифта в Qt

У меня есть три чекбокса, QFontComboBox и QSpinBox, а также главное текстовое поле QTextEdit

121