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

Тема в разделе "MS Visual C++", создана пользователем IY@KOV, 14 апр 2008.

  1. IY@KOV

    IY@KOV Гость

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

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

    namespace CursorEx{
    public ref class RenderCur
    {
    public:
    RenderCur();
    ~RenderCur();
    }
    private:
    Bitmap^ cursorImage;
    }
    файл cursorEx.cpp:
    Код (Text):
    #include "stdafx.h"
    #include "cursorEx.h"
    using namespace CursorEx;
    RenderCur::RenderCur()
    {
    }
    RenderCur::~RenderCur()
    {
    }
    Все бы ничего, если бы мне не хотелось создать этот класс в файле form1.h:
    Код (Text):
    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




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

    gamecreator Гость

    Репутация:
    0
    напиши using и в form1.h
     
  3. IY@KOV

    IY@KOV Гость

    Репутация:
    0
    Код (Text):
    #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
     
  4. gamecreator

    gamecreator Гость

    Репутация:
    0
    попробуй убрать включение form1.h в cursorEx.h
     
  5. IY@KOV

    IY@KOV Гость

    Репутация:
    0
    Большое спасибо!
    А почему так надо делать?
    Почему так работает? 8)
     
  6. gamecreator

    gamecreator Гость

    Репутация:
    0
    потому что form1.h добавляется в cursorEx.h когда в form1.h еще нет cursorEx.h. и добавляется он до объявления пространства имен. потом компилятор проходится по коду и видит класс который раньше нигде не встречался.
     
  7. IY@KOV

    IY@KOV Гость

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

    alexsid Гость

    Репутация:
    0
    Делай так:
    в *.h файле

    Код (Text):
    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"
     

Поделиться этой страницей