Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Не компилится проект


Автор: WERITAS 14.10.2006, 18:53
Сделал программу в среде MS VC++ 6.0, захотел скомпилировать этот же самый код уже в IDE VS 2005,  а там какие-то четыре ошибки smile Никак не могу понять их! Ну вот например одна из них:
Код

error C2248: 'std::basic_ios<Elem,_Traits>::basic_ios':cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'


А вот сами исходники проги (прога типа Виндифа)

functions.h
Код

# pragma once

# include <iostream>
# include <fstream>
# include <windows.h>
# include <string.h>
# include <stdio.h>

using namespace std;

//-----------------------------------------------------------------------------------------------
void RusOut(char *Str);
void Change(char* adress,char s1,char s2,char s3);
void OpenFile(fstream file, char* adress, char* nom);
void FindString(fstream file1, fstream file2, char c1, char c2);



functions.cpp
Код

# include "functions.h"
//-----------------------------------------------------------------------------------------------
void RusOut(char *Str)
{
unsigned char c;
for(int i=0;Str[i]!='\0';i++)
  {
  c=Str[i];
  if(c>127)
    {
    if(c<240)c-=64;
    else     c-=16;
    }
  cout<<c;
  }
}
//-----------------------------------------------------------------------------------------------
void Change(char* adress,char s1,char s2,char s3)
{
    char* newadress = new char[100];
    strcpy(newadress,adress);
    
    newadress[strlen(newadress)-3]=s1;
    newadress[strlen(newadress)-2]=s2;
    newadress[strlen(newadress)-1]=s3;
    
    int i=rename(adress,newadress);
    strcpy(adress,newadress);

    delete [] newadress;
}
//-----------------------------------------------------------------------------------------------
void OpenFile(fstream file,char* adress,char* nom)
{
//    RusOut("Введите путь к "); RusOut(nom);  RusOut(" файлу :> ");
//    cin.getline(adress,100); 
    
    Change(adress,'t','x','t');
    
    file.open(adress,ios::in); 
    
    if(!file) 
    { cout<<"\aERROR: ";
      RusOut("Файл не найден. Проверьте правильно ли введен путь к файлу"); 
      cout<<endl; OpenFile(file,adress,nom); }

}
//-----------------------------------------------------------------------------------------------
void FindString(fstream file1, fstream file2, char c1, char c2)
{
    file1.seekg(0);    
    file2.seekg(0); 
    
    int k=1;
    while(file2.tellg()!=EOF)
    {
        if(c2=='\n') k++;
        
        file1.read(&c1,1);
        file2.read(&c2,1);

        if(c1!=c2) break;
    }
    

    cout<<"\n+--------------------------+\n";
    RusOut("| Номер строки:          "); cout<<k;  cout<<" |"<<endl;
    RusOut("| Символ  в 1-ом файле:  "); cout<<c1; cout<<" |"<<endl;
    RusOut("| Сивмол  во 2-ом файле: "); cout<<c2; cout<<" |"<<endl;
    cout<<"+--------------------------+\n"; 
}


main.cpp
Код

# include "functions.h"
//----------------------------------------------------------------------------------------------
int main()
{
    //SetConsoleTitle("Find String X  ver 0.9.3      (c),2006");
    
    cout<<"+---------------------------------------------------------------------+";
    RusOut("\n|  Программа ищет номер первой отличающейся строки в двух файлах      |"); 
    RusOut("\n|  ВНИМАНИЕ: когда будете вводить имя файла, укажите его расширение   |");
    cout<<" \n+---------------------------------------------------------------------+";
    RusOut("\nНажмите Enter для продолжения"); cin.get(); cout<<"\n";
    
    fstream file_1,file_2;
    char    adress_1[50],adress_2[50],old[3];
    char    ol_1,ol_2,ol_3;
    char    c_1,c_2;

    RusOut("Введите путь к первому файлу  :> ");
      cin.getline(adress_1,100); 

    ol_1 = adress_1[strlen(adress_1)-3]; 
    ol_2 = adress_1[strlen(adress_1)-2]; 
    ol_3 = adress_1[strlen(adress_1)-1];

    OpenFile(file_1,adress_1,"первому");
    
    RusOut("Введите путь ко второму файлу :> ");
      cin.getline(adress_2,100); 

    OpenFile(file_2,adress_2,"второму");

    FindString(file_1,file_2,c_1,c_2);

    file_1.close();
    file_2.close();

    Change(adress_1,ol_1,ol_2,ol_3);
    Change(adress_2,ol_1,ol_2,ol_3);

    RusOut("\nНажмите Enter для продолжения"); cin.get();
    return 0;
}


Теряю веру в VS2005 и в жизнь... Помогите smile

Автор: Daevaorn 14.10.2006, 19:05
Цитата(WERITAS @  14.10.2006,  19:53 Найти цитируемый пост)
void OpenFile(fstream file, char* adress, char* nom);
void FindString(fstream file1, fstream file2, char c1, char c2);

Поменяй на:
Код

void OpenFile(fstream& file, char* adress, char* nom);
void FindString(fstream& file1, fstream& file2, char c1, char c2);

У fstream запрещено копирование

Автор: WERITAS 14.10.2006, 20:38
Сделал как ты сказал - заработало smile

P.S. Кстати, у меня вот этот проект, собранный на VC++ 6.0 и VS2005 работает по-разному! smile Каторый сделан на шестой ищет строку неправильно, а на посл. студии правильно. Теперь буду только ее юзать. smile 

Автор: JackYF 16.10.2006, 15:26
WERITAS, а ты уверен, что нету утечек/багов и т.д.? Чего это, интересно, VC++ 6 делает неправильно...

Странно это как-то...

P.S. Замечание просто так, код я не смотрел...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)