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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объявление или определение? 
:(
    Опции темы
GoldFinch
Дата 9.7.2009, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 6
Всего: 26



zim22, ты объявляеш 2 класса с 1 именем, че ты хотел %)
PM MAIL ICQ   Вверх
zim22
Дата 9.7.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(GoldFinch @  9.7.2009,  21:13 Найти цитируемый пост)
ы объявляеш 2 класса с 1 именем, че ты хотел %)

докопаться до истины. т.к. форма записи с фигурными скобками (определение класса) не совпадала с mes'овой интерпретацией. 
Цитата(mes @  9.7.2009,  19:23 Найти цитируемый пост)
class A{...} extern a; // объявление класса и объявление переменной


истина:
если необходимо объявить несколько переменных типа класса, то делается это так:
Код

extern C a, b, c;

т.е. фигурные скобки не должны указываться.


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


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



****


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

Репутация: 6
Всего: 26



zim22,  
extern class C {} a,b,c;
PM MAIL ICQ   Вверх
zim22
Дата 10.7.2009, 07:55 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



GoldFinch, 
вы ошибаетесь. обратите внимание на этот пост.



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



****


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

Репутация: 6
Всего: 26



да действительно, в extern определять переменные нельзя
нет)
голословные утверждения хорошо, но эксперимент всегда лучше.

Код

// main.cpp

extern
class A 
{
public:
    int f;
} a,b;


int main()
{
    return a.f+b.f;    
}

Код

// foo.cpp

extern
class A 
{
public:
    int f;
} a={5}, b={6};

Код

Программа "[1508] syn_test.exe: Машинный код" завершилась с кодом 11 (0xb).


Добавлено через 8 минут и 56 секунд
в дальнейшем предлагаю не расставлять минусы к постам, а выкладывать рабочий пруфкод, не так уж это и сложно

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


depict1
****


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

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



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

выкладываю. код не линкуется (error LNK2001: unresolved external symbol "class A a")
не подскажете, как здесь объявить переменные a,b используя вашу форму записи?
что-то у меня не получается...
Цитата(GoldFinch @  9.7.2009,  23:11 Найти цитируемый пост)
extern class C {} a,b,c;


Код

// foo.cpp

extern
class A 
{
public:
  A() : f(1) { }
  int f;
  int fcn1() { return 5; }
} a, b;

Код

// main.cpp

extern
class A 
{
public:
  A();
  int f;
  int fcn1();
} a, b;

int main()
{
   return a.f + b.fcn1();    
}





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



****


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

Репутация: 6
Всего: 26



zim22, у тебя 2 разных класса в модулях, поэтому и происходит ошибка линковки. 
в строчке  return a.f + b.fcn1();   переменные объявлены, но линкер не может найти их определение, потому что его нет.

Добавлено @ 15:39
правильный код выглядит так:

Код

//main.cpp

extern
class A 
{
public:
    A() : f(1) { }
    int f;
    int fcn1() { return 5; }
} a,b;


int main()
{
    return a.f+b.fcn1();    
}

Код

//foo.cpp

extern
class A 
{
public:
    A() : f(1) { }
    int f;
    int fcn1() { return 5; }
} a=A(), b=A();

Код

Программа "[3872] syn_test.exe: Машинный код" завершилась с кодом 6 (0x6).

Добавлено @ 15:40
в main.cpp переменные объявлены, в foo.cpp переменные объявлены и определены.
типы переменных одинаковы

Это сообщение отредактировал(а) GoldFinch - 10.7.2009, 15:40
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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