Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C++, mingw 3.5, class

28K
16 сентября 2008 года
BlackAnton
8 / / 14.08.2007
Что-то я уже отчаялся - не могу найти ошибку.

Код:
//lr3class.h
#ifndef LR3CLASS_H
#define LR3CLASS_H

namespace anel
{
    class Alfa
    {
    public:
        Alfa();
        ~Alfa();
        static void incCount();
        static void decCount();
       
    private:
        static int count;
    };
};

#endif

//lr3class.cpp
#include <iostream>

#include "lr3class.h"

using namespace anel;

int Alfa::count = 0;

Alfa::Alfa()
{
    incCount();
   
    if (Alfa::count == 1)
        std::cout << "This is first object. [Constructor]" << std::endl;  
}

Alfa::~Alfa()
{
    decCount();
   
    if (Alfa::count == 0)
        std::cout << "This is last object. [Destructor]" << std::endl;      
}

void Alfa::incCount()
{
    ++count;
}

void Alfa::decCount()
{
    --count;
}

//lr3.cpp
#include <iostream>
#include <conio.h>

#include "lr3class.h"

void testClass();

int main()
{
    testClass();
   
    getch();
    return 0;
}

void testClass()
{
    anel::Alfa first;//, second, third;
}


Компилятор ругается: undefined reference to 'anel::Alfa::Alfa()'
undefined reference to 'anel::Alfa::~Alfa()'
240
16 сентября 2008 года
aks
2.5K / / 14.07.2006
Э, на вид все корректно и должно собраться. Разве что может закрались синтаксические ошибки в имена (типа случайных руских букв похожих на английские), что врятли.
Второй вариант - бинарник полученный в результате компиляции файла lr3class.cpp не линкуется к результирущему. Или что еще хуже - он вобще не скомпилирован.
Покажите как осуществляете сборку всего проекта.
41K
16 сентября 2008 года
qwone
12 / / 27.08.2008
Код:
#include <iostream>
#include <conio.h>

#include "lr3class.h"

void testClass();

int main()
{
    testClass();
   
    getch();
    return 0;
}

void testClass()
{
    [COLOR="Red"]anel::Alfa first;[/COLOR]//, second, third;
}

меня смущает отсутствие скобок [COLOR="Red"]()[/COLOR]: ты что обозначил переменую и даже не инициализировал и ищешь что бы что-то работало? не понимаю

почитай литературу по с++ про классы . К сожалению ты не понял как с классами работать . поэтому там куча ошибок .
28K
17 сентября 2008 года
BlackAnton
8 / / 14.08.2007
Действительно неправильно компилировал, забыл (вернее понадеялся на Dev-C++) указать в опциях к g++ lr3class.cpp, поэтому и не собиралось, когда вручную указал вернуюю комманду, то все получилдось хорошо :)

to qwone
А чем тебя смущало отсутствие скобок?
240
17 сентября 2008 года
aks
2.5K / / 14.07.2006
qwone, что за безосновательные наезды, скобки тут абсолютно не обязательны, а код корректный. Боюсь это вам надо поучить язык. )
87
17 сентября 2008 года
Kogrom
2.7K / / 02.02.2008
Цитата: BlackAnton
Действительно неправильно компилировал, забыл (вернее понадеялся на Dev-C++) указать в опциях к g++ lr3class.cpp, поэтому и не собиралось, когда вручную указал вернуюю комманду, то все получилдось хорошо :)


Не нужно валить вину на Dev-C++. Если включить в проект все нужные файлы *.cpp и *.h (с помощью GUI), то все должно работать. Вероятно, вы это не сделали.

43K
06 ноября 2008 года
sjbchen
3 / / 25.10.2008
Три дня назад начал изучать С++. Компилятор - Dev C++ . Неполучается скомпилировать проэкт из двух срр - файлов. То есть :
1. Закрываю открытые файлы
2. Создаю консольный проэкт
3. Добавляю туда два срр-файла , которые хочу скомпоновать -
Код:
//SeparateModule - демонстрирует как можно разбить программу
// на несколько модулей, упростив написание и проверку; Этот
// модуль содержит функцию, вызываемую из  main()

#include<stdio.h>
#include<iostream.h>

// sumSequence - суммирует последовательность введённых с
// клавиатуры чисел, пока не будет введено отричательное число.
// Возвращает сумму введённых чисел

int sumSequence(ostream& out, istream in)
{
        // вечный цикл
       
        int nAccumulator=0;
       
        for(;;)
        {
                     // ожидание следующего числа
                     int nValue=0;
                     
                     out << "   Введите следующее число:  /n";
                     in  >> nValue;
                     
                     // …Если число отрицательное ...
                     
                     if(nValue<0)
                     {
                                             //... тогда выполнить выход из цикла
                                             break;
               }
               
               // В противном случае добавить число к аккумулятору
               
               nAccumulator+=nValue;
         }
         
         // вернуть сумму
         
         return nAccumulator;
}

}

- Это первый файл,
Код:
// MainModule -демонстрирует как можно разбить программу
// на несколько модулей, упростив написание и проверку; Этот
// модуль содержит функцию  main()

#include<stdio.h>
#include<iostream.h>

int sumSequence(ostream& out, istream& in);

int main(int nArg, char* pszArgs[])
{
        cout <<" Эта программа суммирует последовательности /n"
                 <<" чисел. Вводпоследовательности можно прекратить,/n"
                 <<" введя отрицательное число./n"
                 <<"   Остановить программу можно, /n /n"
                 <<" введя два отрицательных числа подряд /n";
               
                 // накопление последовательности чисел ...

                 int nAccumulatedValue;
                 do
                 {
                     // сложить числа введённые с клавиатуры
                       
                        cout <<"/n   Введите следующую последовательность/n";
                       
                        nAccumulatedValue=sumSequence(cout,cin);
                       
                        //  вывести полученный результат
                       
                        cout <<"/n Сумма равна  "
                                 << nAccumulatedValue
                                 <<"/n";
                                 
                                 // ...пока сумма не равна нулю
                     } while (nAccumulatedValue !=0);
                     
                     
                     cout <<"/n/n/n/n  Программа завершена.  /n   Пока.. /n";
                     
                     return 0;
}


- это второй.

При компиляции каждого из этих файлов в отдельности проблем не возникает ( то есть компилятор выдаёт какие-то там сообщения, но они такие же как и в других "рабочих" программах). А как получить из них один ехе-файл - немогу дорубить.
1.9K
06 ноября 2008 года
max_dark
256 / / 11.11.2005
Цитата: sjbchen

Код:
//SeparateModule - демонстрирует как можно разбить программу
// на несколько модулей, упростив написание и проверку; Этот
// модуль содержит функцию, вызываемую из  main()

#include<cstdio>
#include<iostream>

// sumSequence - суммирует последовательность введённых с
// клавиатуры чисел, пока не будет введено отричательное число.
// Возвращает сумму введённых чисел

using namespace std; // 2 !!!

int sumSequence(ostream& out, istream& in) // 1 !!!
{
        /* ... */
}

}
Код:
// MainModule -демонстрирует как можно разбить программу
// на несколько модулей, упростив написание и проверку; Этот
// модуль содержит функцию  main()

#include<cstdio>
#include<iostream>

using namespace std; // 2 !!!

int sumSequence(ostream& out, istream& in); // 1 !!!

int main(int nArg, char* pszArgs[])
{
    /* ... */
}


1) Разница в заголовке функций: в одном случае второй параметр передается по значению, во втором по ссылке
2) ostream, istream, cout, cin не пренадлежат глобальному пространству имен. Вместо using namespace std бывает полезно использовать префикс std::. Например:

 
Код:
/* ... */
int a;
std::cout<<"enter value ";
std::cin>>a;
/* ... */
43K
07 ноября 2008 года
sjbchen
3 / / 25.10.2008
Неполучается..
вставил using namespace std; - без изменений, попробовал префиксный вариант - ничего. max_dark боюсь вы переоцениваете мой опыт и знания языка . До этого момента я не создавал проектов, только отдельные програмки. Мне кажется что я просто не знаю какие кнопки, и в какой последовательности необходимо нажимать в Dev C++ для

1) создания проекта
2) добавления внего файлов
3) компиляции всей сборки

Например на этапе добавления : добавлять необходимо оба файла, и MainModule.cpp и SeparateModule.cpp , или только MainModule.cpp ?

При создании проекта в окошке редактора появляется заготовка main.cpp . Но ведь у меня же есть своя функция main .Следует ли удалить из проекта main.cpp , и оставить MainModule.cpp ? или необходимо оставить обе функции main ? А может нужно отредактировать main.cpp до MainModule.cpp , а не заменять один на другой ?

После добавления файлов в проект ( слева, в окне проектов ), необходимо просто нажать [скомпилировать и выполнить], или сначала нужно открыть какие-то файлы в окне редактора ? А может , перед компиляцией требуется создать один, общий срр-файл, включив в него MainModule и SeparateModule ? (Но в таком случае непонятно в чём смысл создания проекта, и чем он отличается от отдельной програмки ? )
1.9K
07 ноября 2008 года
max_dark
256 / / 11.11.2005
Цитата: sjbchen
Неполучается..
вставил using namespace std; - без изменений, попробовал префиксный вариант - ничего. max_dark боюсь вы переоцениваете мой опыт и знания языка . До этого момента я не создавал проектов, только отдельные програмки. Мне кажется что я просто не знаю какие кнопки, и в какой последовательности необходимо нажимать в Dev C++ для

1) создания проекта
2) добавления внего файлов
3) компиляции всей сборки

Например на этапе добавления : добавлять необходимо оба файла, и MainModule.cpp и SeparateModule.cpp , или только MainModule.cpp ?

Добавлять оба файла

Цитата:

При создании проекта в окошке редактора появляется заготовка main.cpp . Но ведь у меня же есть своя функция main .Следует ли удалить из проекта main.cpp , и оставить MainModule.cpp ? или необходимо оставить обе функции main ?

Двух функций main быть не должно.

Цитата:

А может нужно отредактировать main.cpp до , а не заменять один на другой ?

Можно как удалить main.cpp(и добавить в проект MainModule.cpp) так и заменить код в нем кодом из MainModule.cpp(при этом добавлять MainModule.cpp в проект не надо)

Цитата:

После добавления файлов в проект ( слева, в окне проектов ), необходимо просто , или сначала нужно открыть какие-то файлы в окне редактора ? А может , перед компиляцией требуется создать один, общий срр-файл, включив в него MainModule и SeparateModule ? (Но в таком случае непонятно в чём смысл создания проекта, и чем он отличается от отдельной програмки ? )

Требуется только нажать [скомпилировать и выполнить], открывать какие либо файлы не обязательно

3
07 ноября 2008 года
Green
4.8K / / 20.01.2000
Цитата: qwone

меня смущает отсутствие скобок [COLOR="Red"]()[/COLOR]: ты что обозначил переменую и даже не инициализировал и ищешь что бы что-то работало? не понимаю


Цитата: aks
qwone, что за безосновательные наезды, скобки тут абсолютно не обязательны, а код корректный. Боюсь это вам надо поучить язык. )


Усугублю.
Скобки в том месте не просто необязательны, а вредны!
Нельзя там скобки писать, да и незачем. Это будет семантической ошибкой.

43K
08 ноября 2008 года
sjbchen
3 / / 25.10.2008
Прежде чем снова плакать по поводу "ничего не получается" , хочу , поблагодарить вас, max dark, за информацию (кое что из высказаного вами явилось для меня откровением ).

При запуске моего проекта компилятор, кроме обычных сообщений выдал такое :
для файла :
D:\INSTALL\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h
сообщение:
ld returned 1 exit status
, и для файла:
D:\MY_DOC\Програмер\Разделение программы\Makefile.win
такое сообщение:
[Build Error] ["Проект] Error 1
Кроме этого было сообщение без адреса:
[Linker error] undefined reference to `sumSequence(std::ostream&, std::istream&)'

(здесь D:\INSTALL\Dev-Cpp\ - директория куда установлен Dev-C++
, а здесь D:\MY_DOC\Програмер\Разделение программы -находятся созданные программы )

Судя по всему все ошибки связанны с компоновкой двух файлов.
Но что же здесь не так?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог