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

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

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

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

29.07.2009, 21:25. Просмотров 1596. Ответов 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
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2009, 21:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Статическое поле (C++):

Только константное статическое поле НЕ МОЖЕТ быть поле членом класса ! - C++
class CCoords { static const float rate = 1.0f; // ОШИБКА !!! bool IsComputed; float x,y; POINT2D ...

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

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

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

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

Статическое подключение 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;
3
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;  //указатель на массив значений входов объекта класса
1
Rififi
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
29.07.2009, 22:00 #4
в первом случае у тебя статическое поле (одно на все экземпляры классов, которые когда либо будут созданы), во втором - каждый класс имеет свой собственный ppValue. разницу чуеш?
1
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)
1
Rififi
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
29.07.2009, 22:45 #6
здесь
1
Skirmisher
44 / 44 / 0
Регистрация: 23.05.2009
Сообщений: 92
29.07.2009, 22:53  [ТС] #7
Цитата Сообщение от Rififi Посмотреть сообщение
В заголовочном файле происходит всего лишь декларация обьекта, память под сам объект не выделяется. для того, чтобы это произошло, статическое поле должно быть обьявлено в единице трансляции.

// Memory.cpp
char** Memory:pValue = NULL;
Просто не сразу понял, что определение должно быть объявлено вне функций спс.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2009, 22:53
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.07.2009, 22:53
Ответ Создать тему
Опции темы

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