2013-06-20 5 views
3

я получаю какое-то сообщение об ошибке, говоря: «Ошибка: идентификатор„XXXX“из области видимости» в VS 2012Visual Studio 2012 Из объема в режиме отладки

Я нашел это все еще происходит даже с очень простого класса как показано ниже.

// this is header file 
public class IRIS_Database 
{ 
public: 
    int test1; 
    IRIS_Database::IRIS_Database(void); 
    IRIS_Database::~IRIS_Database(void); 
}; 


// this is cpp file 
#include "IRIS_Database.h" 

/******************* 
    Constructor 
********************/ 
IRIS_Database::IRIS_Database(void) 
{ 
    test1 = 5; 
    int test2 = 20; 

} 

/***************** 
    Destructor 
******************/ 
IRIS_Database::~IRIS_Database(void) 
{ 
} 

Я поставил точку останова внутри конструктора и добавил test1 и test2 на часах. Вот скриншот.

enter image description here

Как вы можете видеть изображение, test1, который объявлен в заголовке файла «выходит за рамки». Тест2, локальная переменная, объявленная в конструкторе, в порядке. Я могу отслеживать test2, но не test1.

Вот код, который инициирует этот класс из основной функции.

/********************* 
    Main Function 
**********************/ 
int _tmain(int argc, _TCHAR* argv[]) 
{ 

    // Initialize Database 
    IRIS_Database* IRDB = new IRIS_Database(); 
} 

Я не знаю, почему ...

Оптимизация отключена в собственности проекта, и это работает в режиме отладки. Мой код - C++/CLI, смешанный с формами Windows. Таким образом, опция/clr включена. Platform Toolset - это v110, который является VS 2012. Вот все варианты со страницы свойств. Если вы хотите увидеть конкретные параметры, пожалуйста, дайте мне знать.

/GS/analyze-/W3/Zc: wchar_t /I"../IRDB_Include "/ Zi/Od/sdl- /Fd"Debug\vc110.pdb"/FP: точные/D "_CRT_SECURE_NO_WARNINGS"/D, "WIN32"/D "_DEBUG"/D "_CONSOLE"/D "_UNICODE"/D "UNICODE"/errorReport: prompt/WX-/Zc: forScope/Oy-/clr/FU "C: \ Program Files \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ mscorlib.dll "/ FU" C: \ Program Files \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Data.dll "/ FU" C: \ Program Files \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ System.dll "/ FU" C: \ Program Files \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Drawing.dll "/ FU" C: \ Program Files \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Windows.Forms.dll "/ FU" C: \ Program Files \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ System .Xml.dll "/ MDd/Fa" Debug \ "/ EHa/nologo/Fo" Debug \ "/ Fp" Debug \ Nea rIR.pch "

Заранее благодарен!

+3

http://connect.microsoft.com/VisualStudio/feedback/details/783004/children-cannot-be-evaluated-on-c-cli-after-vs2012-update-2 –

+0

Спасибо, Ханс, я обновил и изменил набор инструментов Platform to vs 2010, и он сработал. – diehard98

ответ

2

В данном конкретном случае переменная экземпляра test1 еще не создана. Следующая строка для выполнения (отмечена желтой стрелкой) - это первая строка функции. Он еще не выполнен, поэтому путь выполнения еще не настроил экземпляр, и поэтому test1 пока недоступен. (Делает ли разница test2?)

С другой стороны, test2 является локальной переменной для конструктора и хранится локально в функции. Таким образом, он всегда доступен в любой точке этой функции.

Это просто проблема с инструментом «Часы». Требуется дополнительная работа, но хороший отладчик должен показать, что переменные-члены класса существуют внутри конструктора. MS заявила, что они работают над этой проблемой.