МегаЛамерский вопрос про namespace в С++

ithtcgth

 Такой вот вопрос: я создал в проекте (имя проекта - MyTest) две формы и один файл. Формы называются MyForm и Form1, файл - Point.h . В этом файле есть класс, котрый надо импортировать и использовать в вышеуказанных формах, для чего я вверху написал
#include "Point.h" - все нормально, классы из этого файла могу спокойно использовать.
  Но когда я написал #include "MyForm.h" в файле, где содержится код Form1 и попытался там хотя бы объявить класс MyForm , компилятор стал выдавать множество ошибок, одна из которых говорит, что MyForm не является частью namespace MyTest, хотя все файлы я поместил именно туда. Более того, выдаются подсказки, когда я набиваю MyTest:: всплывают варианты Point, Form1, MyForm - и все равно после компиляции пишет, что MyForm не является частью namespace MyTest.
  Подскажите, в чем же дело...
  З.Ы. namespace везде один - MyTest.

agent007new

Лучше б файлы (хоть в урезанном варианте) запостил

trobak

>и попытался там хотя бы объявить класс MyForm
а как ты его объявляешь?
вот так

namespаce MyTest { class MyForm; }

можно, а вот так
 
class MyTest::MyForm;

- нельзя (до тех, пока компилятор не узнал, что MyForm действительно объявлен в MyTest)

ithtcgth

Лучше б файлы (хоть в урезанном варианте) запостил
Кода сейчас нет. Если не получится использовать далее написанные советы - запощу, все равно - спасибо . Вот его обрывки:
 

Для формы MyForm ( в файле MyForm.h)

#include "Form1.h"
#Include "Point.h"
namespace MyTest{

public ref class MyForm : System::Windows::Forms
{
MyTest::Form1 f1;
MyTest::Point p;
}

}



Для формы Form1( в файле Form1.h)

#include "MyForm.h"
#Include "Point.h"
namespace MyTest{

public ref class Form1 : System::Windows::Forms
{
MyTest::MyForm mf;
MyTest::Point p;
}

}


Для формы Point( в файле Point.h)

#include "Form1.h"
#Include "MyForm.h"
namespace MyTest{

public ref class Point
{
MyTest::MyFrom mf;
MyTest::Form1 f1;
}

}

В классе Form1 и MyForm можно использовать только класс Point.
 
>и попытался там хотя бы объявить класс MyForm
а как ты его объявляешь?
вот так
 
code:--------------------------------------------------------------------------------
namespаce MyTest { class MyForm; }
 --------------------------------------------------------------------------------
можно, а вот так
 
code:--------------------------------------------------------------------------------
class MyTest::MyForm;
 --------------------------------------------------------------------------------
- нельзя (до тех, пока компилятор не узнал, что MyForm действительно объявлен в MyTest)

  Понял, попробую применить, спасибо . Я просто думал, что сходу надо писать
 
MyTest::MyForm f1;  

после чего пользоваться этим f1. Ошибся, видать.

kruzer25

namespace MyTest{
public ref class Form1 : System::Forms
{
MyTest::MyForm mf;
MyTest::Point p;
}
}
Мда... это что, так и нужно писать?
Хоть для классов-то слово self у вас есть, или тоже надо всё время набивать имя класса целиком.
Замечательно переносимый код, одним словом.

kokoc88

Хоть для классов-то слово self у вас есть, или тоже надо всё время набивать имя класса целиком.
Для классов у нас есть слово this. И вообще прежде чем писать такие глупости, надо читать туториалы. Кроме того, namespace в C#/C++ прекрасно рефакторится.

kruzer25

Для классов у нас есть слово this
У вас this - и для классов, и для объектов?

kokoc88

У вас this - и для классов, и для объектов?
Нет, у нас this для объектов, а для классов у нас области видимости.
Мля, сколько учеников у кохтпы...

trobak

public ref class 
а что за язык-то? точно ли C++, а не C#?
а то я слова ref в C++ что-то не припомню

pitrik2

Мда... это что, так и нужно писать?
не понял что смущает?
все вроде просто и понятно написано

kruzer25

Смущает то, что везде надо явно указывать имя namespace. никакого ключевого слова типа ThisNamespace у вас нет?

Dasar

> Смущает то, что везде надо явно указывать имя namespace.
указывать namespace явно не нужно, это здесь только чуть извращаются.

pitrik2

Смущает то, что везде надо явно указывать имя namespace. никакого ключевого слова типа ThisNamespace у вас нет?
ну ты можешь "импортировать" видимые намспайсы и тогда указывать надо будет только при неоднозначности
текущий он вроде по умолчанию "импортирован"
здесь я так понимаю это для нас указали, чтобы нам было точно понятно что откуда
Оставить комментарий
Имя или ник:
Комментарий: