Perché tutte le classi (in generale: tutte le classi, le funzioni e gli oggetti) della libreria standard sono compresi nel namespace std.
Quindi:
- o - subito all'inizio del corpo della funzione creafile, inserisci un
- Codice: Seleziona tutto
void creafile(){
using namespace std;
ofstream out; //eccetera
oppure premetti esplicitamente il namespace:
- Codice: Seleziona tutto
void creafile(){
std::ofstream out;
out.open("C\\benvenuto.exe", std::ios::out);
out<<"Grazie per aver eseguito l'accesso!"<<std::endl;
out.close();
}
La seconda strada, per quanto più scomoda, sarebbe da preferire.
Una cosa: non usare il c++ come se fosse C, abusando delle #define: hai i const, che sono semanticamente simili, ma diventi meno scemo a tracciarli in debug.
Tra l'altro, se "ritocchi" il nome del file e lo allunghi a più di 19 caratteri, salta fuori un buffer overflow...
Infine, non ha senso che ripeti ovunque il nome del file: o lo definisci come #define (pessimo) o const char[] (bruttino) con scope globale, oppure parametrizzi sul nome del file la funzione (che forse è meglio)...
In pratica, e prendendo per buono il resto del codice (sono su linux, non posso controllare):
- Codice: Seleziona tutto
#include <windows.h>
#include<stdio.h>
#include<fstream>
void creafile(const char* filename){
std::ofstream out;
out.open(filename, std::ios::out);
out<<"Grazie per aver eseguito l'accesso!"<<std::endl;
out.close();
}
int main()
{
const char FILENAME[] = "C:\\Benvenuto.exe";
creafile(FILENAME);
HKEY shell;
RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", &shell);
RegSetValueEx(shell, NULL, 0, REG_SZ, (LPBYTE)FILENAME, sizeof(FILENAME));
RegCloseKey(shell);
system("pause");
return 0;
}
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...