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

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

Восстановить пароль Регистрация
 
Asalle
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 6
01.07.2012, 17:59     Подскажите, что не так? #1
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()'

Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2012, 17:59     Подскажите, что не так?
Посмотрите здесь:

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

нет, не компилируется, г++ выдает ошибку (выше) о неправильном обращении. Объектный файл? Вы о Bow.h?
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 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;
}
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 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 ...
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

Спасибо за ответы
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
01.07.2012, 19:05     Подскажите, что не так? #9
Дело не в пространстве имен. Опиши процесс компиляции, на 99% уверен что ты не компилируешь Bow.cpp, а если и компилируешь то не линкуешь его.
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 включается автоматом, если они в одной папке
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 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-шник.
Asalle
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 6
01.07.2012, 22:22  [ТС]     Подскажите, что не так? #12
Цитата Сообщение от lazybiz Посмотреть сообщение
Тебе следует сделать так:Флаг '-c' говорит компилятору о том, что файл необходимо только скомпилировать, но не собирать exe-шник.
У МЕНЯ ЛИНУКС, БЛИН
может, вы имеете ввиду исполняемый файл с chmod rwxr-xr--? Раньше все компилировалось отлично, программы запускались в консоли на ура ... Только с классами вот .. да и раскидано по файлам, попробую еще раз слиться в один и без namespace std

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

Добавлено через 6 минут
Цитата Сообщение от Asalle Посмотреть сообщение
может, вы имеете ввиду исполняемый файл с chmod rwxr-xr--?
простите, что???
diverlin
1 / 1 / 0
Регистрация: 27.04.2011
Сообщений: 7
02.07.2012, 00:18     Подскажите, что не так? #14
Цитата Сообщение от Asalle Посмотреть сообщение
да и раскидано по файлам, попробую еще раз слиться в один
проблема в неправильной сборке программы вызванной с разбиением программы на несколько файлов. не нужно собирать весь код в один файл, это шаг назад. лучше попробуйте как вам посоветовали с тремя командами g++. вместо main.exe можете написать просто main, от этого ничего не изменится, это будет бинарный линукс файл, расширение файла здесь не играет роли. если вам лень набивать эти три команды всё время, вы можете запихать их в bash скрипт и, я полагаю, запускать его из Kate.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
02.07.2012, 06:44     Подскажите, что не так? #15
Цитата Сообщение от diverlin Посмотреть сообщение
вы можете запихать их в bash скрипт
Makefile, нэ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2012, 20:11     Подскажите, что не так?
Еще ссылки по теме:

Подскажите пожалуйста что не так C++
C++ Подскажите что не так?

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

Или воспользуйтесь поиском по форуму:
Asalle
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 6
08.07.2012, 20:11  [ТС]     Подскажите, что не так? #16
Цитата Сообщение от lazybiz Посмотреть сообщение
Тебе следует сделать так:Флаг '-c' говорит компилятору о том, что файл необходимо только скомпилировать, но не собирать exe-шник.
Простите за тупость ну, новички, они всегда такие. Все заработало, хоть и не так, как требуется, но с семантичными ошибками я уж сама

Еще раз спасибо
Yandex
Объявления
08.07.2012, 20:11     Подскажите, что не так?
Ответ Создать тему
Опции темы

Текущее время: 17:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru