Newsgroup: it.comp.programmare.win32
Titolo: valarray e visual studio .NET

Hello, NG!\n
Avrei un problema con il visual studio, cosi' strano che molto
probabilmente c'e' qualcosa sotto che non va come dovrebbe... 
In pratica, quando faccio un progetto che non sia un programma in
console, ma richieda invece le API di windows, ovvero includa
"stdafx.h", non funziona piu' il valarray, ovvero facendo:
#include <valarray> 
mi da' una sfilza di errori (ovviamente, inesistenti, probabilmente
dovuti a qualche nconflitto di nomi) in corrispondenza delle funzioni
inline min() e max() implementate nel suddetto file (indipendentamente
quindi dal fatto che utilizzi o meno le due funzioni succitate). 
Non succede niente di simile con altri headers, nemmeno quelli (come
limits) che implementano delle funzioni chiamate min e max...
Ora, dato che non penso di essere l'unico al mondo che ha pensato di
utilizzare un valarray in un prog che utilizza le api, evidentemente
sto sbagliando qualcosa, ma che cosa?!?
Non puo' essere un problema dovuto al mio codice, dato che l'unica
cosa che aggiungo appena creato un nuovo progetto e' la direttiva
include subito dopo #include "stdafx.h" (se l'aggiungo prima non
cambia nulla...). Help!!
Grazie,
Zeppe

cambia nulla...).
La butto li': se metti #include <valarray> *dentro* stdafx.h che
succede?
-- 
ciao, hal

succede?
Ho provato, a dire il vero, e non cambia granche'. Infatti credo che
il problema sia dovuto ad una macro definita da qualche parte in uno
dei file inclusi da windows.h (che e' incluso in stdafx.h)... Grazie
comunque! :)
Piuttosto, ho trovato una soluzione che mi sembra decente (anche se
non mi capacito della presenza dell'errore), e la riporto nel caso
servisse a qualcun altro in futuro. 
Ho modificato il file "valarray" scrivendo
_Ty (min)() const //...
al posto di 
_Ty min() const
e lo stesso con max(), in modo che sia chiaro che non ci si riferisce
ad una macro (semba che il prob sia quello).
Ovviamente, anche nel codice il problema sussiste per cui, ad esempio,
si deve scrivere:
---------------
double vals [] = {1.0, 2.0, 3.0, 4.0};
std::valarray<double> p(4,vals);
double max_p = (p.max)(); // al posto di p.max()
--------------
Il tutto e' abbastanza scocciante, e potendo vorrei trovare una
soluzione piu' comoda ed elegante (ovvero, standard!)
Ciao,
Zeppe

, 
pass...@MOtiscaliVE.itTHIS says...


hai provato 
#define NOMINMAX
prima di #includere i vari file header di Windows?

prima di #includere i vari file header di Windows?
provato ora, ma nisba... ho anche provato a commentare (lo so che e'
brutto, ma era per testare! :)) i #define min() e max() che ci sono in
cstdlib e in minmax.h (mi pare che si chiami cosi'...), ma nulla...
Mah!
Ciao,
Zeppe

, 
pass...@MOtiscaliVE.itTHIS says...

#usi namespace std; ? ...hai provato a riferirti a std::min() e std::max
()... ?
riciao
dan

 provato ora, ma nisba...
...hmm...forse hai provato male:
Se provi questo codice, se togli #define NOMINMAX avrai tanti errori, se 
invece lo lasci, tutto va OK. Tieni conto che defi #definire NOMINMAX 
*prima* dell'inclusione degli header del Win32 SDK (vale anche se usi 
MFC, #define NOMINMAX deve stare all'inizio).
<CODE>
#define NOMINMAX
#include <windows.h>
#include <conio.h>
#include <valarray>
#include <iostream>
int main( )
{
   using namespace std;
   int i, MinValue;
   valarray<int> vaR ( 10 );
   for ( i = 0 ; i < 10 ; i += 3 )
      vaR [ i ] =  -i;
   for ( i = 1 ; i < 10 ; i += 3 )
      vaR [ i ] =  2*i;
   for ( i = 2 ; i < 10 ; i += 3 )
      vaR [ i ] =  5 - i;
   cout << "The operand valarray is: ( ";
      for ( i = 0 ; i < 10 ; i++ )
         cout << vaR [ i ] << " ";
   cout << ")." << endl;
   MinValue = vaR.min ( );
   cout << "The smallest element in the valarray is: "
        << MinValue  << "." << endl;
	_getch();
}
</CODE>
bye
dan

...hmm...forse hai provato male:
L'hai detto! :)
In effetti l'avevo messo in stdafx.h, ma non abbastanza in alto... Ok!
in questo modo funziona, anche se non credevo che avrei dovuto penare
cosi' tanto per usare un innocuo valarray, tanto piu' che nell'help
non ho trovato nulla! Vabbe'!
Grazie!
Ciao,
Zeppe

 Grazie!
Di niente!
Ciao,
Dan