Fehler, Irrtümer, Fragen - Seite 1099

 
Fehler zur Kompilierzeit
class A {
public:
        A( int  ) { a = 2; }
        A( long ) { a = 3; }
        int a;
};

#define  F( f, cN )  \
template<typename T> \
cN *f( T t ) { return ( new cN( t ) ); }

F( a11, A )

und wenn Sie kein parametrisches Makro verwenden, durch manuelles Ersetzen der Parameter:

//F( a11, A )
template<typename T>
A *a11( T t ) { return ( new A( t ) ); }

void OnStart()
{
        int b = 10;
        A *a = a11( b );
        Print( a.a );
        delete( a );
}
dann ist alles in Ordnung
 

Unsagbar überrascht... ME ist nicht in der Lage, Variablen zu sehen, die in anderen Projektdateien auf der Hauptebene deklariert sind (sie werden nicht hervorgehoben und können nicht zur Variablendefinition springen).

Wie lange ist das schon so?

 
joo:

Unsagbar überrascht... ME ist nicht in der Lage, Variablen zu sehen, die in anderen Projektdateien auf der Hauptebene deklariert sind (sie werden nicht hervorgehoben und können nicht zur Variablendefinition springen).

Wie lange ist das schon so?

In jedem "inluder" müssen Sie auch andere Dateien angeben, mit denen verlinkt werden soll.
 
tol64:
In jedem "inluder" müssen Sie auch andere Dateien angeben, mit denen verlinkt werden soll.

Das Projekt lässt sich gut kompilieren, was bedeutet, dass der Compiler alles sieht - was wo ist. Der ME-Editor tut dies nicht.

Wie stellen Sie sich außerdem vor, die ausführbare Hauptdatei .mq5 als Verzeichnis anzugeben, in dem die Variable deklariert ist?

 
joo:

Das Projekt lässt sich gut kompilieren, was bedeutet, dass der Compiler alles sieht - was wo ist. Der ME-Editor tut das nicht.

Wie stellen Sie sich außerdem vor, die ausführbare .mq5-Hauptdatei als Inline-Datei anzugeben, in der die Variable deklariert ist?

Zum Beispiel so:

//--- Связь с основным файлом эксперта
#include "..\Main.mq5"
Oder nennen Sie ein kurzes Beispiel, bei dem Sie etwas nicht tun können. Es wird schneller gehen. )
 
tol64:

Zum Beispiel so:

Oder nennen Sie ein kurzes Beispiel, bei dem Sie etwas nicht tun können. Es wird schneller gehen. )
\Projekt\

Haupt.mq5

input string Nevidimka="труляля";

#include "Include\Incl.mqh"

\Projekt\Inklusive\

Inkl.mqh

void Func()
{
  Print(Nevidimka);//Тут переменная Nevidimka не подсвечивается как должна бы подсвечиваться и нельзя перейти к месту её объявления
}
 
joo:
...

Hauptdatei im Projektordner:

//+------------------------------------------------------------------+
//|                                                         Main.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//---
#include "Include\Incl.mqh"
//---
input string Nevidimka="труляля";
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| OnTick                                                           |
//+------------------------------------------------------------------+
void OnTick()
  {
  }
//+------------------------------------------------------------------+

Eine Plug-in-Datei im Verzeichnis "Project\Include":

//--- Связь с основным файлом эксперта
#include "..\Main.mq5"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Func()
  {
   Print(Nevidimka); // Теперь подсвечивается и можно перейти к месту её объявления
  }
//+------------------------------------------------------------------+
 
tol64:

Hauptdatei im Projektordner:

Eine Plug-in-Datei im Verzeichnis "Project\Include":

Was ist der Sinn dieser sinnlosen Geste? ME muss Variablen und Funktionen genau so sehen (und programmieren), wie es der Compiler tut.

Außerdem ist das, was Sie vorschlagen, in den meisten Fällen umständlich (Bearbeitung der Einlagen für jedes Projekt?).

 

Die Intellisense einer Datei funktioniert nur innerhalb ihres Bereichs. Das heißt, die gesamte Datei wird mit all ihren offensichtlichen Einschlüssen gescannt.

Sie schlagen vor, die Daten einer bestimmten Datei ohne Links zu anderen unbekannten Dateien anzuzeigen. Dies ist grundlegend falsch.

 
joo:
Wozu also diese sinnlose Geste? ME muss (und der Programmierer) Variablen und Funktionen genau so sehen, wie es der Compiler tut.
Andere Möglichkeiten sind mir nicht bekannt. ) Vielleicht kann jemand anderes antworten.