Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lordif
21 / 21 / 1
Регистрация: 18.04.2010
Сообщений: 87
#1

Компилятор ругается на static переменные - C++

30.05.2012, 12:02. Просмотров 602. Ответов 12
Метки нет (Все метки)

Есть класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Node{
public:
    Node(void) : data(0), next(0), prev(0), first(0), last(0), size(0){}
    Node(const _My& Val){
        data = new _My(Val);
        size++;
    }
    ~Node(void){}
    _My* data;
    Node* next;
    Node* prev;
    static Node* first;
    static Node* last;
    static Node* PTR_END;
    static int size;
};
//...
//...
//...
Node* ptr = new Node();
ptr->PTR_END = ptr;
Не могу понять, почему компилятор ругается на это:
C++
1
2
first(0), last(0), size(0)
ptr->PTR_END = ptr;
Если у этих эл-в в классе убрать static, то все работает, а так ошибка "unresolved external symbol".

Добавлено через 37 минут
Может у меня с головой плохо и нельзя static переменные использовать в классе. Необходимо чтобы во всех объектах были одинаковые значения, изменять которые можно так же во всех объектах и чтобы изменялись они сразу во всех объектах.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2012, 12:02     Компилятор ругается на static переменные
Посмотрите здесь:

Компилятор ругается - C++
Условие Создать класс, содержащий сведения о количестве изделий, собранный сборщиками цеха за неделю. Класс должен содержать следующие...

Компилятор не ругается - C++
Компилятор по разному реагирует на 2 указателя на строки (см.комментарии). В связи с этим появился вопрос - где хранятся аргументы...

ругается компилятор: - C++
#include <stdio.h> #include <iostream> #include <process.h> #include <conio.h> #include <math.h> float a,b; ...

Ругается компилятор - C++
Компилирую программу: // Proba2.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <vector>...

Ругается компилятор - C++
Создать класс жидкость, имеющий название (указатель на строку), плотность. Определить конструкторы, деструктор и операторы вывода в поток....

Static переменные - C++
Написал небольшую программу, подключил к проекту name.h файл. В нем описание переменных static int a, b; Почему их значения можно...

почему компилятор не ругается? - C++
Почему компилятор не ругается, когда я исп. неинициализированную переменную и кладёт автоматически туда мусор. (см..коменатрий в коде): ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
30.05.2012, 12:12     Компилятор ругается на static переменные #2
статческие переменные надо инициализировать вне описания класса
C++
1
Node* Node::first = 0;
Lordif
21 / 21 / 1
Регистрация: 18.04.2010
Сообщений: 87
30.05.2012, 18:48  [ТС]     Компилятор ругается на static переменные #3
Помогите пожалуйста еще. У меня класс в классе:
C++
1
2
3
4
5
6
7
8
9
10
template<typename _My> class base{
 //...
 private:
  class Node{
   static Node* first;
   static Node* last;
   static int size;
  };
 //...
};
Я знаю, что сначала как то надо объявить
C++
1
2
3
Node* Node::first;
Node* Node::last;
int Node::size;
Но я совсем не понимаю где это сделать и как.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
30.05.2012, 18:51     Компилятор ругается на static переменные #4
Зачем Вам статические данные в этом классе?
Lordif
21 / 21 / 1
Регистрация: 18.04.2010
Сообщений: 87
30.05.2012, 19:25  [ТС]     Компилятор ругается на static переменные #5
Ну необходимы... Они служат указателями на первый и последний элемент.

Добавлено через 7 минут
Сделал для нешаблонного класса:
C++
1
2
3
4
5
6
class A{
    class B{
        static B* C;
    };
};
A::B* A::B::C;
Все работает, но с шаблоном не хочет.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
30.05.2012, 19:32     Компилятор ругается на static переменные #6
Вы понимаете, что эти данные разделяют между собой ВСЕ объекты этого класса, и что они существуют независимо от объектов?
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
30.05.2012, 19:34     Компилятор ругается на static переменные #7
не нужны там статические переменные. это бред и глюк. сделайте мемберы обычными и инициализируйте их в конструкторе. при таком подходе с статическими мемберами не получится сделать больше одного экземпляра нода.
Lordif
21 / 21 / 1
Регистрация: 18.04.2010
Сообщений: 87
30.05.2012, 19:37  [ТС]     Компилятор ругается на static переменные #8
Мне необходимо, чтобы у всех объектов были одинаковыми данные поля. Мне необходимо, чтобы эти переменные были именно внутри данного класса, значит они должны быть статическими. Если этого сделать нельзя, то скажите это, буду переделывать мозги.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
30.05.2012, 19:41     Компилятор ругается на static переменные #9
Цитата Сообщение от Lordif Посмотреть сообщение
Мне необходимо, чтобы у всех объектов были одинаковыми данные поля.
Зачем? Смысл тогда создавать новые объекты, если они все одинаковые, и при изменении одного, будут меняться все?
Lordif
21 / 21 / 1
Регистрация: 18.04.2010
Сообщений: 87
30.05.2012, 19:45  [ТС]     Компилятор ругается на static переменные #10
В данном классе существует еще много переменных и ссылок и всего всего. Вы с завидным упорством пытаетесь отговорить меня использовать статический переменные, не могли бы вы объяснить почему.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
30.05.2012, 19:49     Компилятор ругается на static переменные #11
Мы не пытаемся Вас отговорить, просто мы хотим понять, что Вы хотите сделать, и подсказать Вам.
Вот Вы описали класс base, в котором описали класс node. В node статические данные. Причем указатели. Вот эти самые данные буду использоваться ВСЕМИ объектами класса node, и, получается, ВСЕМИ объектами класса base. То есть это будет всего одна переменная, например static Node* first, которая создается при запуске программы, а не какого то объекта. У Вас все объекты node всегда будут указывать в одно место first и last.
Lordif
21 / 21 / 1
Регистрация: 18.04.2010
Сообщений: 87
30.05.2012, 20:36  [ТС]     Компилятор ругается на static переменные #12
А почему всеми объектами класса base? Разве для разных объектов base не будут разные значения, ведь Node то создается всегда заново.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2012, 20:47     Компилятор ругается на static переменные
Еще ссылки по теме:

Почему ругается компилятор - C++
#include &lt;iostream&gt; using namespace std; int main() { int a; cin.get(a); system(&quot;pause&quot;); }

компилятор ругается на структуру - C++
попалась вот такая вот структура для графа, но компилятору она не нравится.... template &lt;class V, class E&gt; struct graph { ...

ошибка компилятор ругается... - C++
LDay::LDay(DayOfWeek today,unsigned short int Lessons,time LessonTime,string s1, string s2=&quot;TEST&quot;,string s3=&quot;&quot;,string s4=&quot;&quot;,string...

Компилятор ругается на синтаксис - C++
cout &lt;&lt; &quot;Введите значение длины в заданных единицах: m, cm, ft, in: &quot; &lt;&lt; '\n'; for (i=0;i&lt;100;++i){ cin &gt;&gt; length &gt;&gt; len_unit; ...

Почему компилятор ругается? - C++
#include&lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;conio.h&gt; using namespace std; FILE*fp; struct Computer { char...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
30.05.2012, 20:47     Компилятор ругается на static переменные #13
Объект класса Node, но не статические данные этого класса, которые никакого отношения к объектам не имеют. Я же писал выше, статические переменные создаются всего один раз при запуске программы, и существуют все время, не зависимо от того, создан хоть один объект или объектов данного класса нет. Поэтому их и нужно инициализировать вне определения класса.
Yandex
Объявления
30.05.2012, 20:47     Компилятор ругается на static переменные
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru