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

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

Войти
Регистрация
Восстановить пароль
 
 
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212
#1

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

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

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

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2013, 16:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос неопределенная ссылка (C++):

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

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

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

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

Ссылка в функции - C++
Как сделать чтобы вот эту функцию void CheckOfMatrix(ifstream File) Можно было бы открыть так: CheckOfMatrix(FirstFile); Пишет что...

Указатель и ссылка - C++
Почему выгодней использовать указатель а не ссылку при использовании массивов?

18
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
09.10.2013, 16:55 #2
Дефис - недопустимый символ для имени макроса. Исправьте это, дальше видно будет.
0
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212
09.10.2013, 16:58  [ТС] #3
Fyret, Картина не поменялась.

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

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

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

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

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

tzeentch, все три файло были в проекте! )) В том то и дело. Может быть сбой линковщика или IDE?
0
alsav22
5421 / 4816 / 442
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2013, 11:03
Привет! Вот еще темы с ответами:

Ссылка на файл - C++
Приветствую всех. У меня небольшой вопрос... Есть код: g_hInputFile = CreateFile( (LPCWSTR)&quot;C://a.txt&quot;, ...

Указатель и ссылка - C++
Помогите понять, немного запутался. #include&lt;iostream&gt; using namespace std; void ch1 (int *pa1); int main() {

Ссылка на ссылку - C++
Можно ли говорить, что t это ссылка на ссылку? int y=2; int &amp;q=y; int&amp; t = q;

Указатель и ссылка - C++
В общем вопрос достаточно простой, в чём разница указателя и сылки? С одной стороны указатель это отдельный тип, отдельная ячейка в...


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

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

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