Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/75: Рейтинг темы: голосов - 75, средняя оценка - 4.83
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
1

неопределенная ссылка

09.10.2013, 16:47. Показов 15287. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Некомпилируется проект. Не могу понять где ошибка.

prata-10-2-head.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef PRATA-10-2-HEAD_H_INCLUDED
#define PRATA-10-2-HEAD_H_INCLUDED
#include <string>
class Person
{
private:
    static const int LIMIT = 25;
    std::string lname;
    char fname[LIMIT];
public:
    Person() {lname = ""; fname[0]='\0';}
    Person(const std::string & ln, const char * fn = "Heyyou");
    ~Person(){};
    void Show() const;
    void FormalShow() const;
};
 
 
 
#endif // PRATA-10-2-HEAD_H_INCLUDED


Prata-10-2.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
#include "prata-10-2-head.h"
#include <iostream>
#include <string>
#include <cstring>
extern LIMIT;
 
Person::Person(const std::string & ln, const char * fn = "Heyyou")
{
    lname=ln;
    strcpy(fname, *fn);
}
 
Person::~Person(){}
 
void Person::Show() const
{
    std::cout << "\n" << fname << " " << lname;
}
 
void Person::FormalShow() const
{
    std::cout << "\n" << lname << ", " << fname;
}


main.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
#include <iostream>
#include "prata-10-2-head.h"
using std::endl;
 
int main()
{
    Person one;
    Person two("Smythecraft");
    Person three("Alex", "Pirce");
 
    one.Show();
    std::cout<<endl;
    one.FormalShow();
    std::cout<<endl;
 
    two.Show();
    std::cout<<endl;
    two.FormalShow();
    std::cout<<endl;
 
    three.Show();
    std::cout<<endl;
    three.FormalShow();
    std::cout<<endl;
 
    return 0;
}


error:
Кликните здесь для просмотра всего текста

F:\lessons\Prata\CodeBlocks\Prata-10-2\prata-10-2-head.h|1|warning: extra tokens at end of #ifndef directive [enabled by default]|
F:\lessons\Prata\CodeBlocks\Prata-10-2\prata-10-2-head.h|2|warning: ISO C99 requires whitespace after the macro name [enabled by default]|
obj\Debug\main.o||In function `main':|
F:\lessons\Prata\CodeBlocks\Prata-10-2\main.cpp|8|undefined reference to `Person::Person(std::string const&, char const*)'|
F:\lessons\Prata\CodeBlocks\Prata-10-2\main.cpp|9|undefined reference to `Person::Person(std::string const&, char const*)'|
F:\lessons\Prata\CodeBlocks\Prata-10-2\main.cpp|11|undefined reference to `Person::Show() const'|
F:\lessons\Prata\CodeBlocks\Prata-10-2\main.cpp|13|undefined reference to `Person::FormalShow() const'|
F:\lessons\Prata\CodeBlocks\Prata-10-2\main.cpp|16|undefined reference to `Person::Show() const'|
F:\lessons\Prata\CodeBlocks\Prata-10-2\main.cpp|18|undefined reference to `Person::FormalShow() const'|
F:\lessons\Prata\CodeBlocks\Prata-10-2\main.cpp|21|undefined reference to `Person::Show() const'|
F:\lessons\Prata\CodeBlocks\Prata-10-2\main.cpp|23|undefined reference to `Person::FormalShow() const'|
||=== Build finished: 8 errors, 2 warnings (0 minutes, 1 seconds) ===|
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2013, 16:47
Ответы с готовыми решениями:

Неопределённая ссылка
Здравствуйте! Сегодня решил я написать проект на OpenGL под Linux. Установил glut, компилятор gcc,...

Неопределенная ссылка
Всем привет :) Столкнулся с такой проблемой : Написал класс Contact и попробовал использовать...

Неопределенная ссылка на деструктор
Здравствуйте! Какое-то время пользовался еклипсом, но пришлось от него отказаться в пользу утилит...

Неопределенная ссылка на `WinMain @ 16 '
учусь программировать в wxdev C++ по книге Шилдта. сделал все как написано а компилятор ругается не...

18
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
09.10.2013, 16:55 2
Дефис - недопустимый символ для имени макроса. Исправьте это, дальше видно будет.
0
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
09.10.2013, 16:58  [ТС] 3
Fyret, Картина не поменялась.

Добавлено через 1 минуту
Или в имени файла тоже дефисы нельзя?
0
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
09.10.2013, 17:17 4
Цитата Сообщение от h_wolf Посмотреть сообщение
Или в имени файла тоже дефисы нельзя?
Не знаю про такое ограничение, так что скорее всего можно.

Спрошу на всякий случай: Prata-10-2.cpp компилируется? полученный объектный файл линкуется?
0
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
09.10.2013, 17:19  [ТС] 5
Fyret, Как в Code::Blocks проверить линкуется ли? Влогах я ошибок в нем не видел. собственно весь лог в спойлере error.
0
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
09.10.2013, 17:33 6
Про Code::Blocks не знаю. Но если файл - часть проекта, должен компилироваться и линковаться.
0
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
10.10.2013, 09:23  [ТС] 7
Все три файла относятся к одно проекту, лежат в одной директории.

Добавлено через 15 часов 48 минут
Никто не знает в чем проблема?? ((
0
26 / 26 / 13
Регистрация: 13.04.2013
Сообщений: 79
10.10.2013, 09:48 8
Рабочий проект в аттаче.
Все работает, но код пришлось немного пофиксить, так что скорее всего файлы были некорректно добавлены в проект.
Вложения
Тип файла: zip test.zip (1.7 Кб, 26 просмотров)
0
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
10.10.2013, 10:11  [ТС] 9
tzeentch, это конечно очень здорово, но не могли бы Вы поведать где был баг?

Добавлено через 1 минуту
Я честно говоря не вижу ни одного измененного символа в коде. Где была ошибка?
0
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,506
Записей в блоге: 6
10.10.2013, 10:16 10
То что я нашел:
1) Вы два раза определяете тело деструктора.
2) fn это указатель
C++
1
    strcpy(fname, *fn);
Ну и так по мелочи...
1
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
10.10.2013, 10:18  [ТС] 11
Ilot, Ок, а остальные ошибки?
0
26 / 26 / 13
Регистрация: 13.04.2013
Сообщений: 79
10.10.2013, 10:24 12
Цитата Сообщение от h_wolf Посмотреть сообщение
где был баг?
Вы не добавили СРР файл в проект, и он не компилировался => ошибка undefined reference, которая возникает когда вызывается обьявленная, но не определенная функция.

Я добавил его в проект и исправил несколько мелких синтаксических ошибок, часть из них описал Ilot, все сейчас не помню.
1
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,506
Записей в блоге: 6
10.10.2013, 10:39 13
Цитата Сообщение от h_wolf Посмотреть сообщение
Ilot, Ок, а остальные ошибки?
ХЗ Исправлял по ходу дела. Например мой компилятор не одобряет определение статической константы в классе пришлось делать через перечисления.
Исправил дерективы:
C++
1
2
#ifndef PRATA102HEAD_H
#define PRATA102HEAD_H
Впринципе смотрите на что у вас компилятор ругается. Он мужЫк умный его надо слушать.
0
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
10.10.2013, 11:00  [ТС] 14
Цитата Сообщение от Ilot Посмотреть сообщение
Он мужЫк умный его надо слушать.
Таки я его и слушаю )

tzeentch, все три файло были в проекте! )) В том то и дело. Может быть сбой линковщика или IDE?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2013, 11:03 15
Цитата Сообщение от h_wolf Посмотреть сообщение
а остальные ошибки?
errors:

1)
C++
1
2
3
extern LIMIT;
     
extern const int LIMIT;
2)
C++
1
2
3
4
5
6
7
8
9
Person::Person(const std::string & ln, const char * fn = "Heyyou")
{
       ...
}
    
Person::Person(const std::string & ln, const char * fn )
{
       ...
}
3)
C++
1
2
3
strcpy(fname, *fn);
    
strcpy(fname, fn);
4)
C++
1
2
3
~Person() {}
     
 ~Person();
warnings:

C++
1
2
3
4
5
#ifndef PRATA-10-2-HEAD_H_INCLUDED
#define PRATA-10-2-HEAD_H_INCLUDED
 
#ifndef PRATA_10_2_HEAD_H_INCLUDED
#define PRATA_10_2_HEAD_H_INCLUDED
1
26 / 26 / 13
Регистрация: 13.04.2013
Сообщений: 79
10.10.2013, 11:08 16
Цитата Сообщение от h_wolf Посмотреть сообщение
tzeentch, все три файло были в проекте! )) В том то и дело. Может быть сбой линковщика или IDE?
Я не видел ваш проект. Я скопипастил код, который вы предоставили, и заставил его работать.

Сбой линковщика - простите, что?? Он ясно вам говорит судя по еррорлогу - отсутсвует определение класса Person.

Вот сбой IDE возможен, точнее, неверное понимание работы с ней. Если бы вы выложили проект целиком, то можно было бы понять, в чем там ошибка... телепатией я, к сожалению, не владею.
0
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
10.10.2013, 12:27  [ТС] 17
tzeentch, link

Цитата Сообщение от alsav22 Посмотреть сообщение
Код C++
1
2
3
4
5
6
7
8
9
10
Person::Person(const std::string & ln, const char * fn = "Heyyou")
{
* * * *...
}
Person::Person(const std::string & ln, const char * fn )
{
* * * *...
}
А как тогда определить аргумент по умолчанию?
0
26 / 26 / 13
Регистрация: 13.04.2013
Сообщений: 79
10.10.2013, 12:30 18
Цитата Сообщение от h_wolf Посмотреть сообщение
А как тогда определить аргумент по умолчанию?
Только в прототипе в h-файле, в cpp не надо.

Пример:
C++
1
2
3
4
5
6
7
struct Foo {
  void foo( int a = 0 );
};
 
void Foo::foo(int a) {
  //...
}
0
11 / 11 / 2
Регистрация: 24.01.2013
Сообщений: 212
10.10.2013, 12:31  [ТС] 19
Цитата Сообщение от tzeentch Посмотреть сообщение
Только в прототипе в h-файле, в cpp не надо.
Понял, спасибо. Как-то не подумал об этом.
0
10.10.2013, 12:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.10.2013, 12:31
Помогаю со студенческими работами здесь

Неопределенная ссылка при многофайловой реализации шаблона
Здравствуйте уважаемые форумчане. И снова я что то делаю не так. Есть 3 файла main.cpp - сама...

Неопределенная ссылка при использовании шаблонного класса
в проекте 4 файла: CmakeLists.txt, main.cpp, list.h, list.cpp. CmakeLists.txt:...

Ошибка "неопределенная ссылка" при работе с std::thread
При попытке сделать что-либо с std::thread, выдает ошибку компиляции, &quot;неопределенная ссылка &quot; . ...

Неопределённая ссылка
Если я создаю объект Json, то при компиляции выпадает ошибка: :-1: error: main.o: undefined...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru