J'ai essayé de faire une déclaration avant pour autoriser l'accès entre les classes. J'ai lu ici que:Problèmes de déclaration en avant C++/CLI
- Je ne peux pas inclure le fichier « a.h » lors de la déclaration de l'avant A b.h
Je n'ai pas pu trouver beaucoup sur les espaces de noms lors de la déclaration en avant. Et je suis assez certain que je suis en train de déconner (je ne sais pas où les mettre). Les erreurs que je reçois sont après les extraits de code pertinents.
C'est ce que je l'ai fait:
J'ai divisé mes définitions de classe de tout être dans .h .cpp et .h
Je garde #ifndef dans mes fichiers .h
Ce sont mes fichiers:
Form1.cpp
#include "stdafx.h"
#include "OpenGL.h"
#include "Form1.h"
#include "serialcom.h"
#include "calculations.h"
using namespace GUI_1;
GUI_1::Form1::Form1(void)
{....
}
void GUI_1::Form1::chlabel2(float num)
{....
}
int GUI_1::Form1::updateHand(int source){....}
void GUI_1::Form1::resetHand(){....}
erreurs pour Form1.cpp C'est la même chose pour toutes les définitions
error C2872: 'GUI_1' : ambiguous symbol
could be 'GUI_1'
or OpenGLForm::GUI_1'
Form1.h
#ifndef form1
#define form1
using namespace OpenGLForm;
//error C2871: 'OpenGLForm' : a namespace with this name does not exist
ref class COpenGL;
namespace GUI_1 {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Summary for Form1
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
OpenGLForm::COpenGL^ o_gl;
// error C2653: 'OpenGLForm' : is not a class or namespace name
Form1(void);
void chlabel2(float num);
protected:
...
...};}
OpenGL.h
#ifndef opengl
#define opengl
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <math.h>
// Declare globals
....
namespace OpenGLForm
{
using namespace System::Windows::Forms;
using namespace GUI_1;
// error C2871: 'GUI_1' : a namespace with this name does not exist
ref class GUI_1::Form1;
// error C2653: 'GUI_1' : is not a class or namespace name
// 'Form1' uses undefined class 'OpenGLForm::GUI_1'
public ref class COpenGL: public System::Windows::Forms::NativeWindow
{
public:
Form1^ form1;
// error C2059: syntax error : ';'
// error C2238: unexpected token(s) preceding ';'
// error C2143: syntax error : missing ';' before '^'
...
};
}
#endif
OpenGL.cpp - aucune erreur ici
#include "stdafx.h"
#include "OpenGL.h"
#include "Form1.h"
OpenGLForm::COpenGL::COpenGL(){};
... other functions that go the same way
GUI_1.cpp - la fonction principale
#include <vcclr.h>
#include <stdio.h>
#include <stdlib.h>
#include "Form1.h"
#include "calculations.h"
#include "serialcom.h"
#include "OpenGL.h"
using namespace GUI_1;
using namespace OpenGLForm;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Enabling Windows XP visual effects before any controls are created
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
GUI_1::Form1 ^form1 = gcnew GUI_1::Form1();
// error C2059: syntax error : '='
OpenGLForm::COpenGL ^open_gl = gcnew OpenGLForm::COpenGL();
form1->o_gl = open_gl;
// error C2143: syntax error : missing ';' before '->'
open_gl->form1 = form1;
// error C2059: syntax error : '='
return 0;
}
Je vais continuer à essayer de déchiffrer ces messages, mais je J'apprécierais toute aide entre-temps.
Merci! Cela s'est débarrassé de la plupart des erreurs. La plupart des erreurs que j'obtiens maintenant sont liées à cette ligne: 'Form1^f_one'; dans OpenGL.h. L'erreur est toujours la même: 'erreur C2143: erreur de syntaxe: manquant ';' avant '^' '. Je ne peux pas trouver beaucoup de choses à ce sujet en ligne:/ – Mewa
Si la réponse a été utile, vous pourriez oughta donner un upvote :) –
Je ne peux pas :(J'ai besoin de plus de réputation, je suis désolé pardon! – Mewa