ругается на static const int i = 1; в теле класса, почему?
От: Аноним  
Дата: 22.06.07 17:05
Оценка:
#include <iostream>
using namespace std;

class base {
public:
    static const int i = 16;
};
const int base::i;


int main()
{

    return 0;
}

в чем тут ошибка?
Заранее спасибо.
Re: ругается на static const int i = 1; в теле класса, почем
От: _nn_  
Дата: 22.06.07 17:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>#include <iostream>
А>using namespace std;

А>class base {
А>public:
А>    static const int i = 16;
А>};
А>const int base::i;


А>int main()
А>{

А>    return 0;
А>}
А>

А>в чем тут ошибка?
А>Заранее спасибо.

Вы выберите одно из двух.
Либо:
class base
{
public: static const int i = 16;
};


Либо
class base
{
public: static const int i;
};

const base::i = 16;


Но не то что вы написали.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: ругается на static const int i = 1; в теле класса, по
От: Аноним  
Дата: 22.06.07 17:57
Оценка:
а почему этот пример не компилируется:
class base
{
public: 
    static const int i = 16;
};
Re: ругается на static const int i = 1; в теле класса, почем
От: Ruweb  
Дата: 22.06.07 18:00
Оценка: :)
vc6 выдаёт ошибку:
C:\Program Files\Microsoft Visual Studio\MyProjects\1\1.cpp(7) : error C2258: illegal pure syntax, must be '= 0'
C:\Program Files\Microsoft Visual Studio\MyProjects\1\1.cpp(7) : error C2252: 'i' : pure specifier can only be specified for functions
Re[2]: ругается на static const int i = 1; в теле класса, по
От: Erop Россия  
Дата: 22.06.07 18:04
Оценка:
Здравствуйте, Ruweb, Вы писали:

R>vc6 выдаёт ошибку:

А он ещё не знает, что так можно
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: ругается на static const int i = 1; в теле класса, по
От: Erop Россия  
Дата: 22.06.07 18:05
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а почему этот пример не компилируется:

Какой компилятор?

Такой синтаксис разрешили не так давно, так что может твой компилятор слишком старый.

Раньше использовали такой хак:
class base
{
public: 
    enum { i = 16 };
};
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: ругается на static const int i = 1; в теле класса, по
От: NikeByNike Россия  
Дата: 22.06.07 18:10
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Аноним, Вы писали:


А>>а почему этот пример не компилируется:

E>Какой компилятор?

E>Такой синтаксис разрешили не так давно, так что может твой компилятор слишком старый.


E>Раньше использовали такой хак:

E>
class base
E>{
E>public: 
E>    enum { i = 16 };
E>};


Почему хак? это наилучшее решение
Нужно разобрать угил.
Re[5]: ругается на static const int i = 1; в теле класса, по
От: Erop Россия  
Дата: 22.06.07 21:21
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Почему хак? это наилучшее решение


Потому что мысль выражена непрямо.
Кроме того тип константы задаётся не совсем тот, какой надо.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: ругается на static const int i = 1; в теле класса, по
От: shank  
Дата: 22.06.07 22:33
Оценка: 1 (1)
Здравствуйте, _nn_, Вы писали:

__>Вы выберите одно из двух.


__>Но не то что вы написали.

Он правильно написал.

9.4.2 п.4
If a static data member is of const integral or const enumeration type, its declaration in the class definition can specify a constant-initializer which shall be an integral constant expression (5.19). In that case, the member can appear in integral constant expressions. The member shall still be defined in a namespace
scope if it is used in the program and the namespace scope definition shall not contain an initializer.

Re[3]: ругается на static const int i = 1; в теле класса, по
От: _nn_  
Дата: 23.06.07 07:01
Оценка:
Здравствуйте, shank, Вы писали:

S>Здравствуйте, _nn_, Вы писали:


__>>Вы выберите одно из двух.


__>>Но не то что вы написали.

S>Он правильно написал.
S>

S>9.4.2 п.4
S>If a static data member is of const integral or const enumeration type, its declaration in the class definition can specify a constant-initializer which shall be an integral constant expression (5.19). In that case, the member can appear in integral constant expressions. The member shall still be defined in a namespace
S>scope if it is used in the program and the namespace scope definition shall not contain an initializer.


Был не прав

Если инициализировать в классе, зачем тогда еще раз писать определение.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: ругается на static const int i = 1; в теле класса, по
От: vladimir_ch Украина  
Дата: 23.06.07 13:41
Оценка:
__>Если инициализировать в классе, зачем тогда еще раз писать определение.

Как раз таки получается наоборот : то что вы пишите "внутри" класса и есть определение( класс сам по себе является определением ), а вне класса необходимо описать саму статическую переменную-член класса. Насколько я знаю, синтаксис, который не обязывал программиста определять статические переменные — члены класса был в старых компиляторах, но потом от этой возможности отказались. Хотя, имхо, к этому скоро вернутся (новое — хорошо забытое старое)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.