J'ai des problèmes pour implémenter ma classe. Il devrait être capable de s'initialiser à partir de std :: string. J'ai donc écrit un constructeur de copie (?):Conversion de 'std :: string' en type non scalaire demandé
CVariable (std::string&, const int p_flags = 0);
Je suis en train de faire un objet de CVariable:
MCXJS::CVariable s_var = (string)"good job";
Je reçois l'erreur suivante:
F:\Projekty\MCXJS\src\main.cpp|8|error: conversion from 'std::string' to non-scalar type 'MCXJS::CVariable' requested|
Comment réparer ça?
JE CHERCHE UNE SOLUTION QUI PERMETTRA CHOSE EXACTEMENT comme suit:
MCXJS::CVariable s_var = (string)"good job";
Edit: ajout de (presque) code source:
cvariable.h
#ifndef CVARIABLE_H
#define CVARIABLE_H
#include <string>
#include <sstream>
namespace MCXJS
{
enum VARTYPE
{
STRING = 0,
INT = 1,
FLOAT = 2
};
class CVariable
{
public:
VARTYPE Type() {return m_type;};
std::string& Value() {return m_value;};
bool SetType (VARTYPE);
private:
const int m_flags;
VARTYPE m_type;
std::string m_value;
// ctors and operators
public:
CVariable (const int p_flags = 0);
CVariable (CVariable&, const int);
CVariable (std::string const&, const int);
CVariable (const int&, const int);
CVariable (const float&, const int);
CVariable& operator= (const CVariable&);
CVariable& operator= (const std::string&);
CVariable& operator= (const int);
CVariable& operator= (const float);
};
};
#endif // CVARIABLE_H
cvariable.cpp
#include "cvariable.h"
using namespace MCXJS;
using namespace std;
CVariable::CVariable (const int p_flags):
m_flags (p_flags)
{};
CVariable::CVariable (CVariable& p_var, const int p_flags = 0):
m_flags (p_flags),
m_type (p_var.Type()),
m_value (p_var.Value())
{};
CVariable::CVariable (std::string const& p_value, const int p_flags = 0):
m_flags (p_flags),
m_type (STRING),
m_value (p_value)
{};
CVariable::CVariable (const int p_value, const int p_flags = 0):
m_flags (p_flags),
m_type (INT)
{
std::ostringstream buffer;
buffer << p_value;
m_value = buffer.str();
};
CVariable::CVariable (const float p_value, const int p_flags = 0):
m_flags (p_flags),
m_type (FLOAT)
{
std::ostringstream buffer;
buffer << p_value;
m_value = buffer.str();
};
main.cpp
#include "cvariable.h"
#include <iostream>
using namespace std;
int main()
{
MCXJS::CVariable s_var = (string)"good job"; // error
cout << s_var.Value() << '\n';
return 0;
}
Edit: ajout d'ENUM VARPARAM
Edit: OK, résolu ci-dessus, maintenant j'ai ceci:
cvariable.cpp|12|error: passing 'const MCXJS::CVariable' as 'this' argument of 'MCXJS::VARTYPE MCXJS::CVariable::Type()' discards qualifiers|
cvariable.cpp|13|error: passing 'const MCXJS::CVariable' as 'this' argument of 'std::string& MCXJS::CVariable::Value()' discards qualifiers|
Qu'est-ce que VARTYPE? – Alerty
FYI: ce n'est pas un constructeur de copie. Un constructeur de copie crée un objet en tant que copie d'un autre objet * de la même classe *. –