Visual c++ comportamento strano

di il
3 risposte

Visual c++ comportamento strano

Salve a tutti
dovendo risolvere un problema per un altro programma e volendo verificare una mia idea.
ho creato un progetto console molto semplice
#include "stdafx.h"
#include <iostream>
using namespace std;
extern "C" int _stdcall xyz(int &abc,int &def);
extern "C" int _stdcall Dimensione_Variabile1(char *dato);
int _tmain(int argc, _TCHAR* argv[])
{
	int indy,kindy,errore;
	char b[55];
	cout << "inserisci un numero : ";
	cin >> indy;
	b[33]=0;
	kindy=Dimensione_Variabile1(b);
	errore=xyz(indy,kindy);
	cout << "somma = "<< errore;
	return 0;
}
ho aggiunto i due file

      #include "stdafx.h" //file 1.cpp
       int Dimensione_Variabile1(char *dato)
          { return sizeof(dato); }
//--------------------------------------------------
#include "stdafx.h" // file 2.cpp
       int xyz(int &uno,int &due)
          { return uno+due; }
 
vado a compilare e mi da:
error LNK2019:riferimento al simbolo esterno _xyz@8
error LNK2019: riferimento al simbolo esterno _Dimensione_Variabile1@4
pensando che fosse un problema di intestazioni.
ho anche provato a levare l'intestazione al file 1
e il compilatore mi ha restituito:
dimevar1.cpp(14): fatal error C1010: fine file imprevista durante la ricerca dell'intestazione precompilata. Si è omesso di aggiungere '#include "stdafx.h"' all'origine?
ho persino provato
a metterlo in un include esterno con un altra estenzione
e mi ha dato in compilazione
xyzc.xxx(3): error C2373: 'xyz': ridefinizione. Modificatori di tipo differenti.
qualcuno saprebbe spiegarmi questo comportamento del visual c++ e naturalmente come risolverlo.
rigrazio anticipatamente tutti

3 Risposte

  • Re: Visual c++ comportamento strano

    I prototipi sono diversi, quindi per il compilatore sono due cose diverse.
    Nel main infatti si aspetta una funzione dichiarata in un certo modo, che poi il linker non trova.
    Nei due file.cpp invece dichiari una funzione non visibile all'esterno.
    Per far funzionare il tutto modifica così le definizioni prototipo:
    
          #include "stdafx.h" //file 1.cpp
           extern "C" int __stdcall Dimensione_Variabile1(char *dato)
              { return sizeof(dato); }
    
  • Re: Visual c++ comportamento strano

    Grazie ancora
    ma perchè quel famoso manuale che ti consiglio di scrivere non lo scrivi?
  • Re: Visual c++ comportamento strano

    Rofl. Guarda che tutti i compilatori si comportano così.
Devi accedere o registrarti per scrivere nel forum
3 risposte