• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

(ошибки С2653 и С2065) про создание классов и Namespaces

  • Автор темы IY@KOV
  • Дата начала
I

IY@KOV

Помогите разобраться с ошибками..
(Создаю на CLR)

в файле cursorEx.h:
Код:
#pragma once
#include "stdafx.h"
#include "form1.h"

namespace CursorEx{
public ref class RenderCur
{
public:
RenderCur();
~RenderCur();
}
private:
Bitmap^ cursorImage;
}

файл cursorEx.cpp:
Код:
#include "stdafx.h"
#include "cursorEx.h"
using namespace CursorEx;
RenderCur::RenderCur()
{
}
RenderCur::~RenderCur()
{
}

Все бы ничего, если бы мне не хотелось создать этот класс в файле form1.h:
Код:
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
CursorEx::RenderCur ^ c1;
CursorEx::RenderCur ^ c2 = gcnew CursorEx::RenderCursor;

}
...
ни одна из строчек не работает...
ни в каком месте не могу создать экземпляр класса..

error C2653: 'CursorEx' : is not a class or namespace name
error C2065: 'RenderCur' : undeclared identifier
error C2065: 'c' : undeclared identifier




Подскажите, что я не так делаю! Как можно создать экземпляр класса?
 
I

IY@KOV

Код:
#pragma once
#include "cursorEx.h"
namespace MyProgam{

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::Threading;

using namespace CursorEx;//Ошибка C2871

/// <summary/>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
CursorEx::RenderCur ^ c;
пробовал, но не находит namespace:
error C2871: 'CursorEx' : a namespace with this name does not exist
 
G

gamecreator

попробуй убрать включение form1.h в cursorEx.h
 
I

IY@KOV

Большое спасибо!
А почему так надо делать?
Почему так работает? 8)
 
G

gamecreator

потому что form1.h добавляется в cursorEx.h когда в form1.h еще нет cursorEx.h. и добавляется он до объявления пространства имен. потом компилятор проходится по коду и видит класс который раньше нигде не встречался.
 
I

IY@KOV

А как мне тогда передать в CursorEx.h параметр типа MyProgram::Form1^ или любого другого который описан в неймспейсе MyProgram?
 
A

alexsid

Делай так:
в *.h файле

Код:
namespace CursorEx{
ref class MyProgram::Form1; // Forward declaration

public ref class RenderCur
{
public:
RenderCur(MyProgram::Form1^ form);
~RenderCur();
}
private:
Bitmap^ cursorImage;
}

и потом в RenderCur.сpp файле пишешь
#include "form1.h"
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!