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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> static и class 
V
    Опции темы
htzg
Дата 24.10.2010, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



создал класс:
Код

class Cvmp
{
private:
    static unsigned int n,N;
public:
    std::vector<unsigned int> limits;
    std::vector<unsigned int> values;
    void set()
    {
        n=0;
        N=0;
        values.clear();
        for(std::vector<unsigned int>::iterator it = limits.begin() ; it != limits.end() ; ++it)
            values.push_back(1);
    }
    bool incr()
    {
        if( values.at(n) < limits.at(n) )
        {
            ++values.at(n);
            if(n != 0)
            {
                for(int i=0 ; i < n ; ++i)
                    values.at(i)=1;
                n=0;
            }
            return 1 ;
        }
        else
        {
            if(n < N)
                ++n;
            else
                if(++N == limits.size())
                    return 0 ;
                else
                    n=N;
            return incr();
        }
    }
};

при выполнении 
Код

Cvmp vpm;
vpm.set();  // <----------

выдает след 2 ошибки:
1>Creator.obj : error LNK2001: unresolved external symbol "private: static unsigned int Cvmp::N" (?N@Cvmp@@0IA)
1>Creator.obj : error LNK2001: unresolved external symbol "private: static unsigned int Cvmp::n" (?n@Cvmp@@0IA)

Не пойму в чем проблема... smile 
PM MAIL   Вверх
mes
Дата 24.10.2010, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



статические датачлены внутри класса только объявляются, еще их надо где то определить

 
Код

//.cpp
 unsigned int Cvmp::N;
 unsigned int Cvmp::n;



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


Опытный
**


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

Репутация: 12
Всего: 14



Попробуй так 
Код

#include <vector>

using namespace std;
class Cvmp
{
private:
    static unsigned int n,N;
public:
    std::vector<unsigned int> limits;
    std::vector<unsigned int> values;
    void set()
    {
        n=0;
        N=0;
        values.clear();
        for(std::vector<unsigned int>::iterator it = limits.begin() ; it != limits.end() ; ++it)
            values.push_back(1);
    }
    bool incr()
    {
        if( values.at(n) < limits.at(n) )
        {
            ++values.at(n);
            if(n != 0)
            {
                for(int i=0 ; i < n ; ++i)
                    values.at(i)=1;
                n=0;
            }
            return 1 ;
        }
        else
        {
            if(n < N)
                ++n;
            else
                if(++N == limits.size())
                    return 0 ;
                else
                    n=N;
            return incr();
        }
    }
};

unsigned int Cvmp::n;
unsigned int Cvmp::N;

int main()
{
  Cvmp vpm;
  vpm.set();
  return 0;
}



Добавлено через 23 секунды
упс опаздал
PM MAIL   Вверх
htzg
Дата 24.10.2010, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо!
Странная какая-то ситуация!
Кто-нибудь может объяснить почему так? Почему объявление внутри класса не хватает?

п.с.: Интересно! smile
PM MAIL   Вверх
mes
Дата 24.10.2010, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



потому что должно выделиться место под статические переменные один раз независимо сколько экземпляров будет создано..
а где взять "это место" компилятор не знает..

Добавлено через 2 минуты и 29 секунд
а выделять там где объявлены не пойдет.. тогда будет создано столько экземпляров статических данных, сколько будет включений хидера с описанием этого класса.. 



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


Бывалый
*


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

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



т.е. этим:
Код

unsigned int Cvmp::n;
unsigned int Cvmp::N;

я выделяю место, а этим
Код

static unsigned int n,N;

объявляю их как static ?
PM MAIL   Вверх
mes
Дата 24.10.2010, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(htzg @  24.10.2010,  19:08 Найти цитируемый пост)
а этим

ага, при условии нахождения этой строчки внутри класса..


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


Бывалый
*


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

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



ок! Спасибо! Я гений!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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