Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ С\С++ _ Строковая константа как член класса

Автор: Litkevich Yuriy 6.5.2008, 11:10

есть класс Foo
мы можем в нем определить интовые константы, например так:

enum myintconst {ONE=1, TWO}

и потом обращатся к ним из других мест так:
Foo::ONE

А как сделать строковые константы, например:
MY_WORD_1 = "word1"
MY_WORD_2 = "word2"
чтобы к ним можно было обращаться в том же стиле, т.е.:
Foo::MY_WORD_2

вроде просто константы в классе нельзя определить, т.е. так:
const QString MY_WORD_1 = "word1"


подскажите как быть :huh:

Автор: ViGOur 6.5.2008, 11:15

Можно так:

#define MY_WORD_1 word1
#define MY_WORD_2 word2


Цитата(Litkevich Yuriy @ 6.5.2008, 12:10) *
вроде просто константы в классе нельзя определить, т.е. так:
Константные можно определять в классе, они определяются также как и статические. ;)

Автор: Litkevich Yuriy 6.5.2008, 11:22

Цитата(ViGOur @ 6.5.2008, 15:15) *
Можно так:
#define MY_WORD_1 word1
#define MY_WORD_2 word2


с дефайнами неудобно, их за именем класса не спрятать,
Цитата(ViGOur @ 6.5.2008, 15:15) *
Константные можно определять в классе, они определяются также как и статические.

т.е. так:
в заголовочном:
const QString MY_WORD_1;

а в файле реализации:
QString Session::MY_WORD_1 = "word1"

или нет?

Автор: Tonal 6.5.2008, 11:26

static const QString MY_WORD_1;

Автор: Litkevich Yuriy 6.5.2008, 11:36

а инициализировать так как я написал?

Автор: ViGOur 6.5.2008, 11:52

Угу.

Автор: Litkevich Yuriy 6.5.2008, 11:54

тоже const надо приписать, а то компилер говорит, не совпадает обявление с определением:

const QString Session::MY_WORD_1 = "word1"

Автор: Andrew Selivanov 6.5.2008, 12:14

//=== whatever.hpp ===

namespace blah
{
    const char* const SOME_CONSTANT = "test";
}


//=== whatever.cpp ===
#include "whatever.hpp"

f()
{
    std::string str = blah::SOME_CONSTANT;
}

Автор: AD 6.5.2008, 12:14

Цитата(Litkevich Yuriy @ 6.5.2008, 12:54) *
тоже const надо приписать, а то компилер говорит, не совпадает обявление с определением:
const QString Session::MY_WORD_1 = "word1"

Константные члены можно ведь инициализировать и в конструкторе класса.
Разве нет? :blink:

Автор: Andrew Selivanov 6.5.2008, 12:30

Цитата(AD @ 6.5.2008, 13:14) *
Константные члены можно ведь инициализировать и в конструкторе класса.
Разве нет? :blink:

1) Более того их нужно инициализировать в конструкторе класса, иначе будет айяйяй :)
2) Не забывай, что он еще и static :)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)