Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Линковка] Как обратиться к классу, определенному, в другом cpp-файле? 
V
    Опции темы
zim22
Дата 17.7.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



К функции xxx мы обращаться можем из main.cpp. Хотя она и определена в другом файле.
Как создать объект класса First в файле main.cpp? (не использую #include и файлы заголовков)

Код

// first.cpp
class First {
public:
  void fcn() { }
};
void xxx() { }

Код

// main.cpp
int main() {
  void xxx();
  xxx();

  First f; // error
  f.fcn();
}




--------------------
PM MAIL   Вверх
azesmcar
Дата 17.7.2009, 14:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



zim22

Указатель можно создать так
Код

class A;

int main()
{
    A* ptr;
}

а вот создать обьект - никак без включения заголовочного файла. Откуда ему знать, есть у класса такой конструктор, открыт ли он вообще итд... А это все компилятору нужно знать на этапе компиляции.

PM   Вверх
mes
Дата 17.7.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(zim22 @  17.7.2009,  13:44 Найти цитируемый пост)
Как создать объект класса First в файле main.cpp?

интересно, как для т.с. связано  "создание объекта"  и "линковка" ?

Это сообщение отредактировал(а) mes - 17.7.2009, 14:55


--------------------
PM MAIL WWW   Вверх
AlexT84
Дата 17.7.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 10.7.2009

Репутация: нет
Всего: 1



Не используя инклуда -- только заново описать класс First.
PM MAIL   Вверх
zim22
Дата 17.7.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(mes @  17.7.2009,  14:54 Найти цитируемый пост)
интересно, как для т.с. связано  "создание объекта"  и "линковка" ?

я сейчас разбираюсь в том, как происходит сборка программмы из исходников. линковка - один из её этапов.
но до линковки не доходит, т.к. исходник даже не компилирууется. smile

класс определён в одном  translation unit
использовать его я хочу в другом  translation unit
значит необходимо обеспечить взаимодействие между юнитами.

здесь  сказано следующее:
Цитата

C and C++ provide for three levels of linkage:
• A name with no linkage denotes an entity that can’t be referenced via names from anywhere else.
• A name with internal linkage denotes an entity that can be referenced via names declared in the same scope or in other scopes of the same translation unit.
• A name with external linkage denotes an entity that can be referenced via names declared in the same scope or in other scopes of the same translation unit (just as with internal linkage), or   additionally in other translation units.


Цитата(azesmcar @  17.7.2009,  14:50 Найти цитируемый пост)
а вот создать обьект - никак без включения заголовочного файла

вы хотите сказать, что нельзя написать программу без использования заголовочных файлов?



--------------------
PM MAIL   Вверх
azesmcar
Дата 17.7.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(zim22 @  17.7.2009,  15:48 Найти цитируемый пост)
вы хотите сказать, что нельзя написать программу без использования заголовочных файлов?

почему это нельзя? Можно!
Код

int main() {}

вот она smile 

Цитата(zim22 @  17.7.2009,  15:48 Найти цитируемый пост)
класс определён в одном  translation unit
использовать его я хочу в другом  translation unit

Цитата(zim22 @  17.7.2009,  15:48 Найти цитируемый пост)
но до линковки не доходит, т.к. исходник даже не компилирууется

Как он будет компилироваться?
Код

class A;
int main()
{
    A* ptr = new A();
}

поставьте себя на место компилятора. Можно ли компилировать этот код, не зная есть ли класса A конструктор по умолчанию (например).
PM   Вверх
zim22
Дата 17.7.2009, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(azesmcar @  17.7.2009,  15:51 Найти цитируемый пост)
 Можно ли компилировать этот код, не зная есть ли класса A конструктор по умолчанию (например).

ну а почему с функциями прокатывает?


--------------------
PM MAIL   Вверх
azesmcar
Дата 17.7.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(zim22 @  17.7.2009,  15:53 Найти цитируемый пост)
ну а почему с функциями прокатывает? 

можно пример, чтобы было понятнее о чем идет речь?

Добавлено @ 15:57
подозреваю что речь идет об этом
Код

void foo();

int main()
{
    foo();
}


ну так с классами это тоже прокатывает. Тут указана сигнатура функции, компилятор знает все необходимое об этой функции и может оставить остальное линкеру. Если описать структуру класса - для классов будет тоже самое (в принципе это и происходит при включении заголовочного файла).

(непонятно зачем приписал extern, он тут не нужен, убрал).

Это сообщение отредактировал(а) azesmcar - 17.7.2009, 16:00
PM   Вверх
zim22
Дата 17.7.2009, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(azesmcar @  17.7.2009,  15:54 Найти цитируемый пост)
можно пример, чтобы было понятнее о чем идет речь?

функция определена в другом файле. тем не менее линкер/компилятор её находит.
Код

// main.cpp
int main()
{
  void fcn();
  fcn();

    return 0;
}


Код

// file.cpp
void fcn() { }





--------------------
PM MAIL   Вверх
azesmcar
Дата 17.7.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



zim22

Ну, прототип функции обявлен ведь.
Код

class A
{
public:
    A();
};

int main()
{
    A t;
}

с классами тоже можно. Вот так. А включение заголовочного файла только копирует его содержимое в текущий.
PM   Вверх
zim22
Дата 17.7.2009, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(azesmcar @  17.7.2009,  16:02 Найти цитируемый пост)
с классами тоже можно. Вот так.

у меня не получается. этап линковки не проходит.
Код

// main.cpp
class A {
public:
  A();
};

int main()
{  
   A t;
  return 0;
}


Код

// A.cpp
class A
{
public:
  A(){}
};


Это сообщение отредактировал(а) zim22 - 17.7.2009, 16:06


--------------------
PM MAIL   Вверх
azesmcar
Дата 17.7.2009, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



file1.cpp
Код

class A
{
public:
    A();
};

int main()
{
    A t;
}


file2.cpp
Код

#include <iostream>

//Тут тоже нужно
class A {
public:
    A();
};

A::A()
{
}

а вот эту часть
Цитата

class A {
public:
    A();
};

заменяют на #include а саму декларацию выделяют в заголовочный файл.

PM   Вверх
zim22
Дата 17.7.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(azesmcar @  17.7.2009,  16:09 Найти цитируемый пост)
а вот эту часть заменяют на #include а саму декларацию выделяют в заголовочный файл.

большое спасибо! я ж говорил, что можно без #include обходиться smile



--------------------
PM MAIL   Вверх
azesmcar
Дата 17.7.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(zim22 @  17.7.2009,  16:11 Найти цитируемый пост)
что можно без #include обходиться 

А я как будто не соглашался smile 
#include по сути вставляет содержимое одного файла в другой, разумеется без него можно (если делать тоже самое самому) smile

Это сообщение отредактировал(а) azesmcar - 17.7.2009, 16:14
PM   Вверх
zim22
Дата 17.7.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Почему в случае определения функции внутри класса линкер не находит её?
Код

//A.cpp
class A
{
public:
  A();
  void fcn(){}
private:
  int data;
};

A::A() { }


Код

// main.cpp
class A {
public:
  A(); 
  void fcn();
};

int main()
{  
   A t;
   t.fcn();
  return 0;
}



--------------------
PM MAIL   Вверх
azesmcar
Дата 17.7.2009, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



zim22

Потому что в этом случае она инлайниться, а инлайн функции как известно должны быть объявлены во всех translation unit-ах.

Добавлено через 59 секунд
Цитата(Стандарт)

An inline function shall be defined in every translation unit in which it is used.

PM   Вверх
zim22
Дата 17.7.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(azesmcar @  17.7.2009,  16:19 Найти цитируемый пост)
Потому что в этом случае она инлайниться, а инлайн функции как известно должны быть определены во всех translation unit-ах.

т.е. можно переопределять её тело, как это ни печально?
и во время объявления класса в main.cpp я изменил его члены данных (определил value типа int) - это тоже прокатило...
т.е. это уже два разных класса получается, а не один. хотя и не совсем два - т.к. конструктор у них один - общий...
ужас какой-то получается

Код

class A {
public:
  A(); 
  void fcn() { int x = 5; }
  int value;  
};

int main()
{  
   A t;
   t.fcn();   
   t.value = 20;

  return 0;
}


Код

// A.cpp
class A
{
public:
  A();
  void fcn(){int y = 10; }
private:
  int data;
};

A::A() : data(99) { }




Это сообщение отредактировал(а) zim22 - 17.7.2009, 16:31


--------------------
PM MAIL   Вверх
azesmcar
Дата 17.7.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(zim22 @  17.7.2009,  16:30 Найти цитируемый пост)
определены 

точно smile опять эти слова спутал

Цитата(zim22 @  17.7.2009,  16:30 Найти цитируемый пост)
ужас какой-то получается

а вот насчет этого ужаса
Цитата

An inline function shall be defined in every translation unit in which it is used and shall have exactly the
same definition in every case 
(3.2).

так что то, что это безобразие работает где-то еще ничего не значит smile
PM   Вверх
zim22
Дата 17.7.2009, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



ок. с inline функциями разобрался  smile 
как насчёт этого:
Цитата(zim22 @  17.7.2009,  16:30 Найти цитируемый пост)
и во время объявления класса в main.cpp я изменил его члены данных (определил value типа int) - это тоже прокатило...т.е. это уже два разных класса получается, а не один. хотя и не совсем два - т.к. конструктор у них один - общий...




--------------------
PM MAIL   Вверх
azesmcar
Дата 17.7.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



zim22

Ну на С++ есть множество способов извратиться, потому этот язык и считается сложным и именно потому для него написано столько книг. Просто не надо так извращаться smile 
PM   Вверх
Леопольд
Дата 17.7.2009, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 3
Всего: 13



Вот это тоже работает, в VC 2008 Express, а не должно:

test.cpp
Код

#include <iostream>

struct S{
private:
    int value;
public:
    S(void);
    int fnc(void){
        return value;
    }
    void mem_fun(void);
};

S::S(void):value(5) {}

void S::mem_fun(void){
    std::cout<<fnc()<<std::endl;
}


main.cpp
Код

class S{
    int value;
public:
    S(void);
    int fnc(void){
        return 10;
    }
    void mem_fun(void);
};


int main(int argc, char* argv[])
{
    S().mem_fun();
    return 0;
}


Но при этом выводит 5 в консольке. Не удивлюсь, если g++ откажется это собирать... Не удивлюсь, если соберёт, и выведет 10 smile или 5  smile 

Это сообщение отредактировал(а) Леопольд - 17.7.2009, 17:07


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
zim22
Дата 17.7.2009, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Леопольд @  17.7.2009,  17:03 Найти цитируемый пост)
Вот это тоже работает, в VC 2008 Express:

а почему бы ему и не работать. как по мне - обычный код smile
Цитата(Леопольд @  17.7.2009,  17:03 Найти цитируемый пост)
Но при этом выводит 5 в консольке.

он и должен 5 выводить. по крайней мере я в уме пошагово прошёл - 5 на выходе оказалось smile
Код

int main(int argc, char* argv[])
{
    S obj; // конструктор инициализирует value "пятёркой"
    obj.mem_fun(); // вызывается функция mem_fun из test.cpp. 
                            // она выводит value на экран. а оно равно пяти.
    return 0;
}


Это сообщение отредактировал(а) zim22 - 17.7.2009, 17:09


--------------------
PM MAIL   Вверх
Леопольд
Дата 17.7.2009, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 3
Всего: 13



Цитата(zim22 @ 17.7.2009,  17:08)
Цитата(Леопольд @  17.7.2009,  17:03 Найти цитируемый пост)
Вот это тоже работает, в VC 2008 Express:

а почему бы ему и не работать. как по мне - обычный код smile

По стандарту, это не должно скомпилироваться.


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
zim22
Дата 17.7.2009, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Леопольд @  17.7.2009,  17:03 Найти цитируемый пост)
Не удивлюсь, если g++ откажется это собирать... 

собирает. без единого warning'a
Цитата(Леопольд @  17.7.2009,  17:10 Найти цитируемый пост)
По стандарту, это не должно скомпилироваться.

ссылочкой не поделитесь где это в стандарте?
***
приведенные вами два cpp файла аналогичны нижеизложенному коду, за одним исключением, в котором вы сами нарушили стандарт:
переопределили тело инлайн функции.

Код

#include "test.h"

int main()
{
  S().mem_fun();
  return 0;
}

Код

// test.h
#ifndef TEST_H
#define TEST_H

struct S{
private:
    int value;
public:
    S(void);
    int fnc(void){
        return value;
    }
    void mem_fun(void);
};


#endif // TEST_H

Код

// test.cpp
#include "test.h"
#include <iostream>

S::S(void):value(5) {}

void S::mem_fun(void){
    std::cout<<fnc()<<std::endl;
}



Это сообщение отредактировал(а) zim22 - 17.7.2009, 17:21


--------------------
PM MAIL   Вверх
Леопольд
Дата 17.7.2009, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 3
Всего: 13



Цитата(zim22 @ 17.7.2009,  17:14)
ссылочкой не поделитесь где это в стандарте?

azesmcar уже цитировал стандарт

Попробуйте заменить main вот на это smile

Код

int main(int argc, char* argv[])
{
    S obj;
    obj.mem_fun();
    std::cout<<obj.fnc()<<std::endl;
    return 0;
}


А потом на это
Код

int main(int argc, char* argv[])
{
    S obj;
    obj.mem_fun();
//  std::cout<<obj.fnc()<<std::endl;
    return 0;
}


надо будет добавить в main #include <iostream>

Это сообщение отредактировал(а) Леопольд - 17.7.2009, 17:25


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
zim22
Дата 17.7.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Леопольд @  17.7.2009,  17:20 Найти цитируемый пост)
azesmcar уже цитировал стандарт

прочитайте ещё раз то, что он цитировал
Цитата(azesmcar @  17.7.2009,  16:37 Найти цитируемый пост)
An inline function shall be defined in every translation unit in which it is used and shall have exactly thesame definition in every case (3.2).

shall != must


--------------------
PM MAIL   Вверх
Леопольд
Дата 17.7.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 3
Всего: 13



Цитата(zim22 @ 17.7.2009,  17:23)
shall != must

Однако ворнинга нет...  А значит, компилятор забил на этот shall smile Я думаю, это бага в gcc 4.3.3

Добавлено @ 17:30
А вот это даёт разный результат в VC 2008 Express и в gcc 4.3.3 - компиляторам нельзя верить, надо проверять smile В этом случае, я думаю, они оба отсупили от стандарта. Даже ворнинга нет, хотя, по моему, это вообще не должно компилироваться. Остаётся только считать, то это даёт нам undefined behaviour.

Код

int main(int argc, char* argv[])
{
    S().mem_fun();
    std::cout<<S().fnc()<<std::endl;
    return 0;
}


Это сообщение отредактировал(а) Леопольд - 17.7.2009, 17:35


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
zim22
Дата 17.7.2009, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Леопольд @  17.7.2009,  17:26 Найти цитируемый пост)
Однако ворнинга нет...  А значит, компилятор забил на этот shall

да, глюк неприятный. undefined behavior. однако избежать его достаточно просто - не переопределять inline функции smile


--------------------
PM MAIL   Вверх
Леопольд
Дата 17.7.2009, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 3
Всего: 13



Цитата(zim22 @ 17.7.2009,  17:34)
да, глюк неприятный. undefined behavior. однако избежать его достаточно просто - не переопределять inline функции smile

По старинке, пользоваться #include  smile 


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
mes
Дата 17.7.2009, 20:17 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(zim22 @  17.7.2009,  14:53 Найти цитируемый пост)

ну а почему с функциями прокатывает? 

потому что Вы путаете сущности  этапа компиляции и линковки. Для начала исходный код, транслируется в объектный - этап компиляции.
На этом этапе Cpp-код  лишается всего своего ООП . В итоге объектники cpp, си, паскаля, асма и др. "выглядят" одинаково и из нескольких таких (полученных с разных языков) объектников можно слинковать одну общую прогу. 



--------------------
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1608 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.