Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Asalle
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 6
1

Подскажите, что не так?

01.07.2012, 17:59. Просмотров 690. Ответов 15
Метки нет (Все метки)

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//bow.h
 
using namespace std;
 
class Bow 
    {
      string color;
      bool drawn;
      int arrows;
      
      public: 
      Bow(string icolor);
      ~Bow();
      void draw();
      int fire();
      
    };
 
 
//bow.cpp
 
 
using namespace std;
       
  void  Bow::Bow(string icolor)
    {
      numOfArrows=10;
      drawn=false;
      color= icolor;
    }
 void  Bow::~Bow()
    {
      
    }
    
    
    
    void Bow::draw()
    {
      drawn = true;
      cout << color<<" Is drawn";
    }
    int Bow::fire()
    {
      if (!drawn)
        {
          cout << color << "Is not drawn";
          return 0;
        }
      cout << "Fire!!";
     
       return 0;
    }
    
 
//main.cpp
#include <iostream>
#include <string>
#include "Bow.h"
using namespace std;
 
 
int main(void)
{
  Bow red("Red");
  Bow blue("Blue");
  red.fire();
  blue.draw();
  blue.fire();
}
Изучаю ООП, это моя первая пр. с классами, но я не могу понять, почему g++ выдает это:
Код
ndefined reference to `Bow::Bow(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
s.cpp:(.text+0xca): undefined reference to `Bow::Bow(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
s.cpp:(.text+0xe2): undefined reference to `Bow::fire()'
s.cpp:(.text+0xee): undefined reference to `Bow::draw()'
s.cpp:(.text+0xfa): undefined reference to `Bow::fire()'
s.cpp:(.text+0x106): undefined reference to `Bow::~Bow()'
s.cpp:(.text+0x112): undefined reference to `Bow::~Bow()'
s.cpp:(.text+0x18d): undefined reference to `Bow::~Bow()'
s.cpp:(.text+0x19d): undefined reference to `Bow::~Bow()'

Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2012, 17:59
Ответы с готовыми решениями:

Подскажите что не так?
Класс #include &lt;string&gt; #include &lt;fstream&gt; #include &lt;math.h&gt; #include...

Подскажите что не так?
Нужно заменить цифры в числе на ноль, если цифра равна &quot;a&quot;. А затем вывести...

Подскажите что не так ?
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &lt;math.h&gt; using namespace...

Подскажите, что делаю не так
Нужно написать прогр позволяющую юзеру с помощью пунктов меню найти сумму,...

Подскажите, что не так с программой?
#include &lt;cstdlib&gt; #include&lt;iostream&gt; using namespace std; int main() {...

15
sandye51
программист С++
833 / 592 / 147
Регистрация: 19.12.2010
Сообщений: 2,016
01.07.2012, 18:01 2
Asalle, конструкторы и деструктор ничего не должны возвращать
1
MegaMozg
45 / 45 / 3
Регистрация: 19.12.2008
Сообщений: 110
01.07.2012, 18:17 3
в Bow.cpp
C++
1
#include "Bow.h"
сделай
1
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
01.07.2012, 18:22 4
Тут дело не в конструкторах. Скорее всего ты не компонуешь Bow.obj / Bow.o на стадии линковки. Он, кстати, у тебя вообще компилируется? Объектный файл Bow есть?
0
Asalle
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 6
01.07.2012, 18:28  [ТС] 5
убрала void перед констр и дестр, включила Bow.h в Bow.cpp, но ничего не изменилось

нет, не компилируется, г++ выдает ошибку (выше) о неправильном обращении. Объектный файл? Вы о Bow.h?
0
sandye51
программист С++
833 / 592 / 147
Регистрация: 19.12.2010
Сообщений: 2,016
01.07.2012, 18:32 6
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
#include <string>
#include <iostream>
 
class Bow 
{
    std::string color;
    bool drawn;
    int arrows;
    
public: 
    explicit Bow(const std::string& icolor);
    ~Bow();
    
    void draw();
    int fire();
};
 
Bow::Bow(const std::string& icolor)
{
    drawn = false;
    color= icolor;
}
 
Bow::~Bow()
{
}
 
void Bow::draw()
{
    drawn = true;
    std::cout << color<<" Is drawn" << std::endl;
}
 
int Bow::fire()
{
    if (!drawn)
    {
        std::cout << color << "Is not drawn" << std::endl;
        return 0;
    }
    std::cout << "Fire!!" << std::endl;
    
    return 0;
}
 
int main(void)
{
    Bow red("Red");
    Bow blue("Blue");
    red.fire();
    blue.draw();
    blue.fire();
    
    return 0;
}
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
01.07.2012, 18:43 7
Цитата Сообщение от Asalle Посмотреть сообщение
нет, не компилируется
Так а какого результата ты ожидаешь?
Ошибки, которые ты показала, появляются при компиляции main.cpp или bow.cpp ?
Каким образом осуществляется процесс компиляции?

Добавлено через 6 минут
C
1
s.cpp:(.text+0xe2): undefined reference to `Bow::fire()'
Судя по первым символам эти ошибки возникают не при компиляции Bow.cpp ...
0
Asalle
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 6
01.07.2012, 19:02  [ТС] 8
я компилирую main.cpp, он же s.cpp, но компиляция не происходит. main.cpp - это основной файл программы, bow.h - объявление класса Bow, bow.cpp - это инициализация полей данных и методов.
приношу извинения, я должна была Разъяснить это раньше

о проблемах с using namespace std наслышана, сейчас опробую std::string

Спасибо за ответы
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
01.07.2012, 19:05 9
Дело не в пространстве имен. Опиши процесс компиляции, на 99% уверен что ты не компилируешь Bow.cpp, а если и компилируешь то не линкуешь его.
0
Asalle
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 6
01.07.2012, 19:15  [ТС] 10
g++ -Wall -W -Werror s.cpp -o SCPP

далее вылазят ошибки, сейчас на теле, включить сюда их не могу

хм, на всякий случай : Kubuntu 11.04, IDE== Kate, compiler==g++

дело в том, что я думала, когда. включаешь Bow.h, Bow.cpp включается автоматом, если они в одной папке
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
01.07.2012, 19:20 11
Тебе следует сделать так:
g++ -с -Wall -W -Werror Bow.cpp -o Bow.o
g++ -с -Wall -W -Werror main.cpp -o main.o
g++ -o main.exe Bow.o main.o
Флаг '-c' говорит компилятору о том, что файл необходимо только скомпилировать, но не собирать exe-шник.
1
Asalle
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 6
01.07.2012, 22:22  [ТС] 12
Цитата Сообщение от lazybiz Посмотреть сообщение
Тебе следует сделать так:Флаг '-c' говорит компилятору о том, что файл необходимо только скомпилировать, но не собирать exe-шник.
У МЕНЯ ЛИНУКС, БЛИН
может, вы имеете ввиду исполняемый файл с chmod rwxr-xr--? Раньше все компилировалось отлично, программы запускались в консоли на ура ... Только с классами вот .. да и раскидано по файлам, попробую еще раз слиться в один и без namespace std

Всем огромное спасибо за ответы
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
01.07.2012, 23:42 13
Цитата Сообщение от Asalle Посмотреть сообщение
У МЕНЯ ЛИНУКС
А какая разница, этот флаг актуален вне зависимости от хоста.

Добавлено через 6 минут
Цитата Сообщение от Asalle Посмотреть сообщение
может, вы имеете ввиду исполняемый файл с chmod rwxr-xr--?
простите, что???
0
diverlin
1 / 1 / 0
Регистрация: 27.04.2011
Сообщений: 7
02.07.2012, 00:18 14
Цитата Сообщение от Asalle Посмотреть сообщение
да и раскидано по файлам, попробую еще раз слиться в один
проблема в неправильной сборке программы вызванной с разбиением программы на несколько файлов. не нужно собирать весь код в один файл, это шаг назад. лучше попробуйте как вам посоветовали с тремя командами g++. вместо main.exe можете написать просто main, от этого ничего не изменится, это будет бинарный линукс файл, расширение файла здесь не играет роли. если вам лень набивать эти три команды всё время, вы можете запихать их в bash скрипт и, я полагаю, запускать его из Kate.
1
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
02.07.2012, 06:44 15
Цитата Сообщение от diverlin Посмотреть сообщение
вы можете запихать их в bash скрипт
Makefile, нэ?
0
Asalle
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 6
08.07.2012, 20:11  [ТС] 16
Цитата Сообщение от lazybiz Посмотреть сообщение
Тебе следует сделать так:Флаг '-c' говорит компилятору о том, что файл необходимо только скомпилировать, но не собирать exe-шник.
Простите за тупость ну, новички, они всегда такие. Все заработало, хоть и не так, как требуется, но с семантичными ошибками я уж сама

Еще раз спасибо
0
08.07.2012, 20:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2012, 20:11

подскажите что не так с программой
Скажите пожалуйста, почему программа не работает. Написала же вроде все как...

RasEnumConnections Подскажите, что не так!!!
#include &lt;windows.h&gt; #include &lt;Ras.h&gt; int main() { DWORD dwRas; RASCONN...

Подскажите, что не так в коде
void sortofalpfavit(WORKER* st, int n) { int i,j; for (i = 0; i &lt; n; i++)...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

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