Конструктор будет работать, но не из другого файла - PullRequest
0 голосов
/ 14 декабря 2018

Извините, новичок в C ++ здесь и не может найти ответы, которые я ищу где-либо.Я пытаюсь запустить простейшую программу на C ++, используя ООП и несколько файлов.Если в классе Vehicle нет функции doSomething(), конструктор печатает просто отлично.Когда я добавляю функцию и вызываю car.doSomething(), это просто дает мне ошибки.Я искал несколько дней и не могу найти рабочий ответ.

main.cpp

#include <stdio.h>
#include <iostream>
#include "Vehicle.h"

using namespace std;

int main(int argc, char **argv){
    Vehicle car;

    car.doSomething();

    return 0;
}

Vehicle.cpp

#include "Vehicle.h"

Vehicle::Vehicle(){
    cout << "do something" << endl;
}

void doSomething(){
    cout << "do something else" << endl;
}

Vehicle.h

#pragma once
#include <iostream>

using namespace std;

class Vehicle{
    public:
        Vehicle();
        void doSomething();
};

Как я уже говорил, новичок в C ++ и не уверен, как это исправить.Спасибо за любую помощь.

Характеристики:

Codelite v10.0.0,

Linux Ubuntu 18.04

Ошибка: неопределенная ссылка на 'Vehicle :: doSomething () '

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Вам не нужно искать в течение нескольких дней;вам нужно было только прочитать главу в вашей книге C ++ об определении функций-членов.

Это выглядит так:

void Vehicle::doSomething()
{
    cout << "do something else" << endl;
}

То, что Vehicle:: - это то, как компьютер знает, что это doSomethingопределение для класса Vehicle (как вы уже делали с конструктором).

Без этого это просто обычная функция.Неважно, что файл называется Vehicle.cpp;C ++ на самом деле не заботится об именах файлов.В этом файле вы могли бы иметь все виды функций, переменных, определений классов и т. Д., Независимо от того, назывались ли они Vehicle.cpp или Stuff.cpp или Lightness4Eva.cpp (это не значит, что ваше соглашение об именах плохое!).

0 голосов
/ 14 декабря 2018

запись определения doSomting () с именем класса, как в файле .cpp:

void Vehicle::doSomething()
{
cout << "do something else" << endl;
}
0 голосов
/ 14 декабря 2018

Полагаю, в этом случае у вас есть «неразрешенная» ошибка компоновщика.Это означает, что ошибка не во время выполнения, а во время сборки.Сообщение об ошибке может подсказать вам, что компоновщик не может найти Vehicle :: doSomething ().Это указывает на то, что вы на самом деле не предоставили функцию doSomething ().Читайте сообщения об ошибках, это помогает понять, что не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...