ошибка в типе данных 'String' and 'System::String'

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
shilovec5377
Сообщения: 8
Зарегистрирован: 16 июн 2014, 15:50

Всем привет.
помогите, выдает ошибку
[BCC32 Error] File1.cpp(40): E2015 Ambiguity between 'String' and 'System::String'

Код: Выделить всё

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#pragma argsused
#include <iostream>
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;


class String
{

private:
    char *str;
public:
    String();
    String(char *s);
    String(const String &);
    ~String();
     String& operator-=(const String& op);
    void input();
    void see();

};

String::String()
{
    strcpy(str,"");
}

String::String(char *s)
{
    strcpy(str,s);
}

String::String(const String &a)
{

	strcpy(str,a.str);
}

String::~String()
{
    if(str) delete [] str;
}
String & String: :o perator-=(const String & op)
   {
    int i;
    for(i=0;*(this->str)==op.str[i]&&*(this->str)&&op.str[i];i++){
        this->str++;
    }
    return *this;
}

void String::see()
{
	cout<<"new string: "<<str<<endl;
}

void String::input()
{
    cout << "Enter String: ";
    gets(str);
}

int main()
{
	String a,b;
    a.input();
	b.input();
	b-=a;
	b.see();

	return 0;
}

}
//---------------------------------------------------------------------------
Аватара пользователя
Decoder
Сообщения: 308
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

Попробуй убрать из текста строку
Код cpp:
#include <vcl.h>



Скорее всего из-за неё возникает конфликт имён.
Поумнеть несложно, куда труднее от дури избавиться.
shilovec5377
Сообщения: 8
Зарегистрирован: 16 июн 2014, 15:50

Decoder писал(а):Попробуй убрать из текста строку
Код cpp:
#include <vcl.h>



Скорее всего из-за неё возникает конфликт имён.
теперь такая
[ILINK32 Error] Error: Unresolved external '__InitVCL' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\7.0\LIB\CP32MTI.LIB|crtlvcl
Аватара пользователя
Decoder
Сообщения: 308
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

В настройках проекта нужно отключить использование VCL.


Второй вариант: в тексте программы самому объявить пустую функцию _InitVCL(),
только нужно уточнить её синтаксис, какие параметры она принимает на входе и какой тип возвращает.


Третий вариант: классу String дать какое-нибудь другое имя, например MyString.
Поумнеть несложно, куда труднее от дури избавиться.
shilovec5377
Сообщения: 8
Зарегистрирован: 16 июн 2014, 15:50

переименовала класс, теперь не компилируется
raised exception class EAccessViolation with message "Access Violation"
Аватара пользователя
Decoder
Сообщения: 308
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

Если приложение выбрасывает исключение, значит оно уже собрано и запущено.
А исключение возникает из-за того, что в конструкторе класса строки не выделяется память под массив символов. Переменная str никак не инициализирована.
Поумнеть несложно, куда труднее от дури избавиться.
shilovec5377
Сообщения: 8
Зарегистрирован: 16 июн 2014, 15:50

Decoder писал(а):Если приложение выбрасывает исключение, значит оно уже собрано и запущено.
А исключение возникает из-за того, что в конструкторе класса строки не выделяется память под массив символов. Переменная str никак не инициализирована.
исправте пж, а то уменя уже бошка кипит

Код: Выделить всё

//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#pragma argsused
#include <iostream>
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
 
 
class String
{
 
private:
    char *str;
public:
    String();
    String(char *s);
    String(const String &);
    ~String();
     String& operator-=(const String& op);
    void input();
    void see();
 
};
 
String::String()
{
    strcpy(str,"");
}
 
String::String(char *s)
{
    strcpy(str,s);
}
 
String::String(const String &a)
{
 
    strcpy(str,a.str);
}
 
String::~String()
{
    if(str) delete [] str;
}
String String:: operator-=(String op)
   {
    int i;
    for(i=0;*(this->str)==op.str[i]&&*(this->str)&&op.str[i];i++){
        this->str++;
    }
    return *this;
 
void String::see()
{
    cout<<"new string: "<<str<<endl;
}
 
void String::input()
{
    cout << "Enter String: ";
    gets(str);
}
 
int main()
{
    String a,b;
    a.input();
    b.input();
    b-=a;
    b.see();
 
    return 0;
}
 
}
//----
Ответить