Page 1 of 1

std::string

Posted: 28 Feb 2018, 18:05
by david_stelian
In codul urmator am urmatoarele erori:
error: conversion from 'const char [15]' to non-scalar type 'MyClass' requested
error: conversion from 'const char [13]' to non-scalar type 'MyClass' requested
error: conversion from 'const char [13]' to non-scalar type 'MyClass' requested
Ce inseamna aceaste erori si ce modificari trebuie sa fac ?

Code: Select all

#include <iostream>
#include <iostream>
#include <cstring>
using namespace std;

class MyClass
{
private:
    string *Name;
public:
    MyClass(string *Name)
    {
        this->Name = new string;
        this->Name = Name;
    }
    string *getName()
    {
        return Name;
    }
};

int main()
{
    MyClass obj[3] = {"Popescu Bogdan", "Dobre Virgil", "Afrem Dragos"};
    MyClass *ptr;
    ptr = &obj[0];
    cout << endl;
    for (int i=0; i<3; i++)
    {
        cout << " " << ptr->getName() << endl;
        ptr++;
    }
    return 0;
}

Re: std::string

Posted: 28 Feb 2018, 20:59
by Viorel
Un obiect MyClass nu poate fi construit în baza unui șir de caractere simplu.

Eroarea de compilare poate fi rezolvată prin adăugarea unui alt fel de constructor:

Code: Select all

MyClass( const char * Name )
{
   this->Name = new string(Name);
}
O altă soluție:

Code: Select all

#include <iostream>
#include <string>
using namespace std;

class MyClass
{
private:
   string Name;
public:
   MyClass( const char * Name )
   {
      this->Name = Name;
   }

   MyClass( const string & Name )
   {
      this->Name = Name;
   }

   const string & getName() const
   {
      return Name;
   }
};


int main()
{
	MyClass obj[3] = { "Popescu Bogdan", "Dobre Virgil", "Afrem Dragos" };
	MyClass *ptr;
	ptr = &obj[0];
	cout << endl;
	for( int i = 0; i < 3; i++ )
	{
		cout << " " << ptr->getName() << endl;
		ptr++;
	}

	return 0;
}

Re: std::string

Posted: 07 Mar 2018, 14:15
by Daniel
În cazul în care dorești să menții tipul de dată membră string pointer și alocarea de memorie din constructor, ar fi bine să te gândești și la un destructor adecvat.