crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Тема закрытаНачать новую тему
> Строковая константа как член класса, как реализовать?
Litkevich Yuriy
  опции профиля:
сообщение 6.5.2008, 11:10
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


есть класс 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
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Можно так:
#define MY_WORD_1 word1
#define MY_WORD_2 word2


Цитата(Litkevich Yuriy @ 6.5.2008, 12:10) *
вроде просто константы в классе нельзя определить, т.е. так:
Константные можно определять в классе, они определяются также как и статические. ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.5.2008, 11:22
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(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
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


static const QString MY_WORD_1;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.5.2008, 11:36
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


а инициализировать так как я написал?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 6.5.2008, 11:52
Сообщение #6


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Угу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.5.2008, 11:54
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


тоже const надо приписать, а то компилер говорит, не совпадает обявление с определением:
const QString Session::MY_WORD_1 = "word1"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrew Selivanov
  опции профиля:
сообщение 6.5.2008, 12:14
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


//=== whatever.hpp ===

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


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

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


Сообщение отредактировал Andrew Selivanov - 6.5.2008, 12:17
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 6.5.2008, 12:14
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


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

Константные члены можно ведь инициализировать и в конструкторе класса.
Разве нет? :blink:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrew Selivanov
  опции профиля:
сообщение 6.5.2008, 12:30
Сообщение #10


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


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

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

Сообщение отредактировал Andrew Selivanov - 6.5.2008, 12:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Тема закрытаНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 6.2.2023, 22:59