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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Skirmisher
44 / 44 / 0
Регистрация: 23.05.2009
Сообщений: 92
#1

Статическое поле - C++

29.07.2009, 21:25. Просмотров 1589. Ответов 6
Метки нет (Все метки)

Помогите с такой проблемой.
Программа нормально компилится, но возвращается, вот такая ошибка при объявлении
статического поля, являющегося указателем на массив значений строк символов(char*) типа char.
Вот код:
Файл "Memory.h"
C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
#include "combinate.h"
 
class Memory :
    public Combinate
{
public:
    static char **ppValue; //указатель на массив значений входов объекта класса
public:
    Memory(int innum=3, int outnum=1);
    ~Memory();
};
Файл реализации "Memory.cpp"
C++
1
2
3
4
5
6
7
8
9
10
#include "Memory.h"
 
Memory::Memory(int innum, int outnum)
{
    ppValue=(char**)new char[innum+outnum][4];
}
Memory::~Memory()
{
    delete [] ppValue;
}

Ошибка такого вида:
error LNK2001: unresolved external symbol "public: static char * * Memory:pValue" (?ppValue@Memory@@2PAPADA)
Неразрешенный внешний символ: "public: static char * * Memory:pValue" (?ppValue@Memory@@2PAPADA)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2009, 21:25     Статическое поле
Посмотрите здесь:

Статическое поле,количество экземпляров класса - C++
Помогите понять,статическое поле stcount считает количество созданных экземпляров класса (объектов),я объявляю всего два объекта а он...

Почему метод класса затирает статическое поле - C++
Добрый день :) Я учу самостоятельна с++. Сейчас разбираю тему классы. Вот у меня возник вопрос по коду: #include<iostream> using...

Мое константное статическое поле только что было использовано до того как оно создалось? - C++
В названии темы уже понятно, думаю, что у меня за проблема. Я экспериментировал со статическими полями классов (в частности с...

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

Статическое объявление матрицы - C++
Здравствуйте. у меня есть матрица А: int n, m; cout<<"n = "; cin>>n; cout<<"m = "; cin>>m; double...

Статическое подключение DLL - C++
Хочу подключить dll в файл при компиляции в VC++ Project -> Settings... -> Вкладка General -> раскрываемый список Microsoft foundation...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rififi
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
29.07.2009, 21:31     Статическое поле #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
В заголовочном файле происходит всего лишь декларация обьекта, память под сам объект не выделяется. для того, чтобы это произошло, статическое поле должно быть обьявлено в единице трансляции.

// Memory.cpp
char** Memory::ppValue = NULL;
Skirmisher
44 / 44 / 0
Регистрация: 23.05.2009
Сообщений: 92
29.07.2009, 21:57  [ТС]     Статическое поле #3
Цитата Сообщение от Rififi Посмотреть сообщение
В заголовочном файле происходит всего лишь декларация обьекта, память под сам объект не выделяется. для того, чтобы это произошло, статическое поле должно быть обьявлено в единице трансляции.

// Memory.cpp
char** Memory:pValue = NULL;
В таком случае компилируется и собирается нормально:
Файл "Memory.h"
C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
#include "combinate.h"
 
class Memory :
    public Combinate
{
public:
    char **ppValue;  //указатель на массив значений входов объекта класса
public:
    Memory(int innum=3, int outnum=1);
    ~Memory();
};
C++
1
2
3
4
5
6
7
8
9
10
11
#include "Memory.h"
 
Memory::Memory(int innum, int outnum)
{
    Memory::ppValue=0;
    ppValue=(char**)new char[innum+outnum][4];
}
Memory::~Memory()
{
    delete [] ppValue;
}
При объявление модификатора static в "Memory.h" ошибка остается.
В связи с этим вопрос, является ли это поле статическим?
C++
1
2
public:
    char **ppValue;  //указатель на массив значений входов объекта класса
Rififi
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
29.07.2009, 22:00     Статическое поле #4
в первом случае у тебя статическое поле (одно на все экземпляры классов, которые когда либо будут созданы), во втором - каждый класс имеет свой собственный ppValue. разницу чуеш?
Skirmisher
44 / 44 / 0
Регистрация: 23.05.2009
Сообщений: 92
29.07.2009, 22:12  [ТС]     Статическое поле #5
Цитата Сообщение от Rififi Посмотреть сообщение
в первом случае у тебя статическое поле (одно на все экземпляры классов, которые когда либо будут созданы), во втором - каждый класс имеет свой собственный ppValue. разницу чуеш?
Если объявить с модификатором static и в файле "memory.cpp"
Файл "Memory.h"
C++
1
static char **ppValue;
C++
1
Memory::ppValue=0;
Не решение проблемы, так не собирается проект.
Неразрешенный внешний символ: "public: static char * * MemoryValue" (?ppValue@Memory@@2PAPADA)
Rififi
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
29.07.2009, 22:45     Статическое поле #6
здесь
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2009, 22:53     Статическое поле
Еще ссылки по теме:

Статическое приведение типов - C++
Здравствуйте! Помогите пожалуйста разобраться со следующим кодом. #include <iostream> using namespace std; class Item { ...

Динамическое и статическое выделение памяти - C++
Добрый вечер. Если участок программы допускает создание некоего объекта и статически, и динамически, то какой способ лучше использовать? ...

Статическое связывание параметров методов - C++
Добрый день! В коде (представлен ниже) сделал оболочки для константной и простой ссылок. Известно, что в функции, которая ожидает...

Статическое подключение системных DLL-файлов - C++
Добрый вечер, уважаемые форумчане! Ситуация следующая: Я написал программу, все работает так, как мне нужно. С помощью Actual Installer...


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

Или воспользуйтесь поиском по форуму:
Skirmisher
44 / 44 / 0
Регистрация: 23.05.2009
Сообщений: 92
29.07.2009, 22:53  [ТС]     Статическое поле #7
Цитата Сообщение от Rififi Посмотреть сообщение
В заголовочном файле происходит всего лишь декларация обьекта, память под сам объект не выделяется. для того, чтобы это произошло, статическое поле должно быть обьявлено в единице трансляции.

// Memory.cpp
char** Memory:pValue = NULL;
Просто не сразу понял, что определение должно быть объявлено вне функций спс.
Yandex
Объявления
29.07.2009, 22:53     Статическое поле
Ответ Создать тему
Опции темы

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