std::string

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Post Reply
david_stelian
Junior
Junior
Posts: 20
Joined: 13 Sep 2014, 22:35
Judet: Dolj

std::string

Post by david_stelian » 28 Feb 2018, 18:05

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;
}



Viorel
Microsoft MVP
Microsoft MVP
Posts: 292
Joined: 13 Jul 2007, 12:26

Re: std::string

Post by Viorel » 28 Feb 2018, 20:59

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;
}

Daniel
Junior
Junior
Posts: 4
Joined: 03 Nov 2012, 17:07
Judet: Mureş
Location: Târgu-Mureș
Contact:

Re: std::string

Post by Daniel » 07 Mar 2018, 14:15

Î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.
Nihil sine Deo

Post Reply