Visual C ++ 2005: как получить доступ к значениям элемента управления формы Win32 в файле .cpp? - PullRequest
0 голосов
/ 21 декабря 2008

Я недавно начал ковыряться в Visual Studio 2005, и я бреду в Visual C ++. Когда я дважды щелкаю элемент управления в конструкторе, он открывает файл .h, который, как я понял, предназначен для объявлений прототипов, и, если я добавлю все функции в него, я смогу заставить мою программу работать но мне не нравится иметь код в файле .h.

Однако, когда я помещаю вещи в файл .cpp, я никак не могу получить доступ к элементам управления вообще. Я получаю много ошибок компилятора и тому подобное, и мне интересно, чего ожидает VC ++, так как я больше привык к среде GCC / MinGW.

Я получаю больше всего ошибок:

error C2228: left of '.trackBar1/.value/.etc' must have class/struct/union
error C2227: left of '->trackBar1/->Value/->etc' must point to class/struct/union/generic type

Я пробовал следующее для доступа к элементу управления:

Junk::Form1::trackBar1->value
Junk::Form1::trackBar1.value
Junk::Form1->trackBar1
Junk->Form1->trackBar1
this->trackBar1->value //This is legal in the .h file, and how I can get it to work there
trackBar1->value

И несколько других, которые являются просто попытками отчаяния. Я попытался указать то же пространство имен и все, что присутствует в файле .h, и я все еще не могу получить доступ к элементу управления.

Я использую Visual Studio 2005 с приложением формы Win32 Visual C ++ CLR. Код, который Visual Studio использует для создания экземпляров элементов управления:

this->trackBar1 = (gcnew System::Windows::Forms::TrackBar());  

В Dev-C ++ или code :: blocks я привык помещать объявления классов в файл .h, а затем указывать функции в файле .cpp, выполняя class :: function, но в Visual Studio, Я просто не могу понять, почему я не могу сделать то же самое, или что я делаю ужасно неправильно и глупо.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2009

Это могло произойти, потому что элементы управления были изменены (то есть двойной щелчок). Вернитесь к элементу управления (в режиме конструктора) и измените имя. Тогда верни его обратно. Затем перекомпилируйте.

Ура!

0 голосов
/ 21 декабря 2008

Спасибо за разъяснение вопроса, вот несколько идей

  • Убедитесь, что файл .h включен в соответствующий cpp, например, убедитесь, что если вы определили

foo.h

class
{
...
};

убедитесь, что в foo.cpp включен foo.h, например:

#include "foo.h"

... definitions ...
  • Похоже, что в контексте вашего класса ссылка на trackBar1 должна быть действительной, это ваш последний пример выше. Если вы находитесь за пределами области действия вашего класса, вам необходимо объявить экземпляр включающего класса и сослаться на его экземпляр trackBar.

Кроме того, как я уже говорил:

Вам необходимо знать, является ли ваша "Form1" значением или экземпляром объекта, класса или пространства имен. Если его пространство имен / класс более поздний, чем уместным использовать :: для уточнения пространства имен. Судя по ошибке, похоже, что это не пространство имен / класс / структура. Вы, кажется, также пытаетесь рассматривать это как указатель. Это указатель? Как это новенькое?

Я бы упростил эксперимент с очень простым примером заголовка / cpp для C ++. Подтвердите, что это работает. Медленно скопируйте и вставьте свой функционал и посмотрите, на каком этапе он ломается. Сделайте программу hello world VS 2005 и добавьте в нее код.

Когда вы найдете, где он ломается, а он все еще сломан, отредактируйте ваш вопрос с помощью упрощенного набора примеров кода, и мы сможем помочь вам отладить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...