Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Pirokar
4 / 4 / 0
Регистрация: 21.10.2012
Сообщений: 54
#1

Undefined reference to - C++

05.03.2014, 13:31. Просмотров 576. Ответов 7
Метки нет (Все метки)

Есть класс NavyPort. Его заголовок:
NavyPort.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef NAVYPORT_H
#define NAVYPORT_H
 
class NavyPort
{
    public:
        NavyPort(bool p,  int what, int r);
        void unloadingShip();
        void loadShip();
        void goAway();
};
 
#endif // NAVYPORT_H


Его реализация:
NavyPort.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "NavyPort.h"
#include<iostream>
using namespace std;
 
bool pier;
int raid;
enum shipStatus
    {
        onPier = 1,
        onRaid = 2,
        empty = 3,
        withCargo = 4
    };
shipStatus ship;
 
NavyPort::NavyPort(bool p,  int what, int r)
{
    pier = p;
    raid = r;
    ship = (shipStatus)what;
}
 
 
 
    void unloadingShip()
    {
        if (pier)
          cout << "\n\nПричал занят!";
        else
        {
            if(raid > 0)
                raid--;
            ship = empty;
            cout << "\n\nКорабль подошел к причалу. Количество судов на рейде" << raid;
        }
 
    }
 
    void loadShip()
    {
        if (pier)
          cout << "\n\nПричал занят!";
        else
        {
           if(raid > 0)
                   raid--;
               ship = withCargo;
           cout << "\n\nКорабль загружен";
        }
    }
 
    void goAway()
    {
        pier = true;
        cout << "\n\nПричал освобожден";
    }


И в main я пытаюсь его использовать:
Main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include "NavyPort.h"
#include <locale.h>  // подключает setlocale
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");//Русификация текста
    cout << "Добро пожаловать в гавань!" << endl;
    NavyPort* port = new NavyPort(false, 2, 5);
    for (;;)
    {
        int choise = -1;
        cout << "Что вы хотите сделать?\n\n";
        cout << "1: Загрузить корабль\n";
        cout << "2: Разгрузить корабль\n";
        cout << "3: Освободить причал от кораблей\n";
        cout << "0: Вернуться в реальный мир";
 
        cin >> choise;
 
        if (choise == 1)
            port->loadShip();
        else if (choise == 2)
            port->unloadingShip();
        else if (choise == 3)
            port->goAway();
        else if (choise == 0)
            break;
        else
            cout << "\n\nВы ошиблись при выборе варианта!";
    }
    return 0;
}


Проблема в том, что компилятор пишет ошибки в main:
||=== Build: Debug in OOP_Laba1 (compiler: GNU GCC Compiler) ===|
obj\Debug\main.o||In function `main':|
C:\Users\Pirokar\Documents\OOP\OOP_Laba1\main.cpp|24|undefined reference to `NavyPort::loadShip()'|
C:\Users\Pirokar\Documents\OOP\OOP_Laba1\main.cpp|26|undefined reference to `NavyPort::unloadingShip()'|
C:\Users\Pirokar\Documents\OOP\OOP_Laba1\main.cpp|28|undefined reference to `NavyPort::goAway()'|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

Почему это undefined references??? Помогите, пожалуйста, голову уже сломал.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2014, 13:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Undefined reference to (C++):

Странная ошибка: [Linker error] undefined reference to `__dyn_tls_init_callback' [Linker error] undefined reference to ld returned 1 exit status - C++
Здравствуйте. Вот недавно начал изучать книгу &quot;С++ для чайников&quot; Стефан Р. Девис 4-е издание. И напоролся на кучу ошибок) Но смог все...

Undefined reference to - C++
Много уже тем создано по даннму вопросу, но решения так и не нашел.. Есть конечно догадки, но как реализовать все равно не знаю. Прошу...

undefined reference to `A::a' - C++
//==========================================================================================================================================...

undefined reference... - C++
Добрый день.На C перешел совсем недавно,поэтому могу не знать всех тонкостей.Подскажите,в какую сторону копать для исправления следующей...

undefined reference to - C++
http://www.cyberforum.ru/qt/thread861722.html Не в том разделе создал тему, и поэтому даю линк на неё. Описание ошибки там же

Undefined reference to - C++
Matrix.h #pragma once #include &lt;iostream&gt; template &lt;typename T&gt; class Matrix { private: int n1, n2; T **mas; public:...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
05.03.2014, 13:59 #2
Pirokar, а где у вас в объявлении класса элементы данных? Есть только методы класса. В конструкторе,
Цитата Сообщение от Pirokar Посмотреть сообщение
NavyPort::NavyPort(bool p, *int what, int r)
{
* * pier = p;
* * raid = r;
* * ship = (shipStatus)what;
}
вы каким элементам присваиваете значения параметров конструктора?
Ilot
Модератор
Эксперт С++
1810 / 1167 / 227
Регистрация: 16.05.2013
Сообщений: 3,075
Записей в блоге: 5
Завершенные тесты: 1
05.03.2014, 14:27 #3
Забыли указать область видимости методов в файле реализации.
pier, raid и ship должны быть полями класса.
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
05.03.2014, 14:37 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Pirokar Посмотреть сообщение
Почему это undefined references???
потому когда Вы писали реализацию методов
C++
1
2
3
void unloadingShip();
        void loadShip();
        void goAway();
Вы не указали что они принадлежат классу NavyPort
надо так
C++
1
2
3
4
void NavyPort::loadShip()
{
//реализация
}
Pirokar
4 / 4 / 0
Регистрация: 21.10.2012
Сообщений: 54
05.03.2014, 14:59  [ТС] #5
Цитата Сообщение от Extrim88 Посмотреть сообщение
Pirokar, а где у вас в объявлении класса элементы данных? Есть только методы класса. В конструкторе,

вы каким элементам присваиваете значения параметров конструктора?
Спасибо за ответы! А что, в h файле нужно переменные еще указывать? Только в cpp недостаточно? И как это делается? Просто объявить?
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
05.03.2014, 15:21 #6
Цитата Сообщение от Pirokar Посмотреть сообщение
А что, в h файле нужно переменные еще указывать? Только в cpp недостаточно?
Ваши
C++
1
2
bool pier;
int raid;
являются глобальными переменными, в таком виде они не относятся к классу NavyPort.
Чтобы относились - их нужно добавить в класс:
C++
1
2
3
4
5
6
7
8
9
10
11
class NavyPort
{
public:
   NavyPort(bool p,  int what, int r);
   void unloadingShip();
   void loadShip();
   void goAway();
private:
   bool pier; // добавили раз
   int raid; // добавили два
};
Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
05.03.2014, 15:27 #7
Цитата Сообщение от Pirokar Посмотреть сообщение
А что, в h файле нужно переменные еще указывать?
Вот в заголовочном файле в описании класса, и нужно указывать все данные: поля класса, его методы.

Цитата Сообщение от Pirokar Посмотреть сообщение
Только в cpp недостаточно?
В cpp - файле этого делать не надо, здесь вы указываете определения методов класса.

Цитата Сообщение от Pirokar Посмотреть сообщение
И как это делается? Просто объявить?
Например, так:
Цитата Сообщение от Pirokar Посмотреть сообщение
#ifndef NAVYPORT_H
#define NAVYPORT_H
class NavyPort
{
private:
bool pier;
int what;
* * public:
* * * * NavyPort(bool p, *int what, int r);
* * * * void unloadingShip();
* * * * void loadShip();
* * * * void goAway();
};
#endif // NAVYPORT_H
Pirokar
4 / 4 / 0
Регистрация: 21.10.2012
Сообщений: 54
05.03.2014, 21:43  [ТС] #8
Большое спасибо всем за ответы! Завтра буду пробовать )))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2014, 21:43
Привет! Вот еще темы с ответами:

undefined reference - C++
Пытаюсь разобраться с Box2D. Выпадает куча ошибок типа undefined reference to `b2World::b2World(b2Vec2 const&amp;)'| Box2D.h файл...

undefined reference - C++
Доброго времени суток! Есть следующий код: #include &lt;iostream&gt; using namespace std; enum direction {Up, Down, Left, Right}; ...

Undefined reference to - C++
Помогите, пожалуйста. Нужно было написать программу с использованием шаблона. Появляется ошибка &quot;undefined reference to...

Undefined reference to `auxDIBIm - C++
Здравствуйте, использую Dev C++. при компиляции проекта выдаёт ошибку Undefined reference to `auxDIBIm (на скриншоте) библиотека glaux.lib...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.03.2014, 21:43
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru