<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[reference member ‘int&amp;amp; Mapping&amp;lt;int&amp;gt;::to’, can&#x27;t use default assignment operator]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>inzwischen habe ich zu obiger Fehlermeldung schon viel im Internet gesucht und auch das eine oder andere gefunden. So z.B. dass man in C++ einer Referenz nichts zuweisen kann, sondern diese initialisiert werden muss und anschließend nicht mehr geändert werden kann. Doch leider hilft mir dieses Wissen bei meinem konkreten Programm nicht weiter, da ich nicht sehe, wo ich was falsch mache. Ich hoffe, jemand von euch kann mir helfen.</p>
<p>Hier mein (wesentlicher) Code:</p>
<p>#include &lt;sstream&gt;</p>
<p>template&lt;class T&gt; class Mapping{<br />
private:<br />
std::string from;<br />
T&amp; to;<br />
public:<br />
Mapping(std::string&amp; f, T&amp; t):from(f),to(t){ }</p>
<p>std::string getFrom(){ return from; }</p>
<p>T&amp; getTo(){ return to; }</p>
<p>std::string toString() const{<br />
//int bzw. double to in einen string umwandeln:<br />
std::stringstream sstr;<br />
sstr &lt;&lt; to;<br />
std::string stringTo;<br />
sstr &gt;&gt; stringTo;</p>
<p>return &quot;( &quot;+from+&quot;\t-&gt;\t&quot;+stringTo+&quot; )&quot;;<br />
}<br />
};</p>
<p>FormelParser.hpp:</p>
<p>...<br />
typedef Mapping&lt;int&gt; intMapping;<br />
typedef Mapping&lt;double&gt; doubleMapping;<br />
typedef Mapping&lt;class T&gt; universeMapping;</p>
<p>FormelParser.cpp:</p>
<p>#include &quot;FormelParser.hpp&quot;</p>
<p>unsigned int pos;<br />
std::vector&lt;Mapping&lt;int&gt;* &gt; <em>varMapping;<br />
std::vector&lt;Mapping&lt;double&gt;</em> &gt; *constMapping;<br />
DdManager *mgr;<br />
std::set<a href="std::string" rel="nofollow">std::string</a> *variables;</p>
<p>...</p>
<p>DdNode* FormelParser::parseConstant(string cons){<br />
double consDouble = toDouble(cons.c_str());<br />
addToConstMapping(cons, consDouble);<br />
return Cudd_addConst(mgr,consDouble);<br />
}</p>
<p>int FormelParser::getIndex(std::vector&lt;intMapping&gt;*&amp; mapping, string var){<br />
std::vector&lt;intMapping&gt;::iterator it;<br />
for(it=mapping-&gt;begin(); it!=mapping-&gt;end(); ++it){<br />
if(var.compare(it-&gt;getFrom())==0) return it-&gt;getTo();<br />
}<br />
return -1;<br />
}</p>
<p>...</p>
<p>DdNode* FormelParser::newVariable(int p, string s){<br />
std::cout &lt;&lt; &quot;newVariable(&quot; &lt;&lt; s &lt;&lt; &quot;)&quot; &lt;&lt; endl;<br />
string variable = varName(s, p); std::cout &lt;&lt; &quot;Variable: &quot; &lt;&lt; variable &lt;&lt; endl;<br />
pos = p+variable.length();<br />
if(!isVariableName(variable)){<br />
...<br />
throw new IllegalArgumentException(err);<br />
}<br />
DdNode* res;<br />
if(variables-&gt;find(variable)!=variables-&gt;end()){//Variable schon erzeugt<br />
std::cout &lt;&lt; &quot;Variable schon erzeugt&quot; &lt;&lt; endl;<br />
int index = getIndex(varMapping, variable);<br />
res = Cudd_addIthVar(mgr,index); Cudd_Ref(res);<br />
}<br />
else{<br />
res = Cudd_addNewVar(mgr); Cudd_Ref(res);<br />
int index = Cudd_NodeReadIndex(res);<br />
intMapping *newVar = new intMapping::Mapping(variable, index);<br />
varMapping-&gt;push_back(*newVar);<br />
variables-&gt;insert(variable);<br />
}<br />
return res;<br />
}</p>
<p>...</p>
<p>FormelParser::FormelParser(DdManager *manager){<br />
pos = 0;<br />
mgr = manager;<br />
Cudd_EnableGarbageCollection(mgr);<br />
varMapping = new std::vector&lt;Mapping&lt;int&gt; &gt;();<br />
constMapping = new std::vector&lt;Mapping&lt;double&gt; &gt;();<br />
variables = new std::set<a href="std::string" rel="nofollow">std::string</a>();<br />
}</p>
<p>std::vector&lt;intMapping&gt;* FormelParser::getVarMapping(){ return varMapping; }<br />
std::vector&lt;doubleMapping&gt;* FormelParser::getConstMapping(){ return constMapping; }</p>
<p>void FormelParser::addToVarMapping(string from, int to){<br />
intMapping *var = new intMapping::Mapping(from,to);<br />
varMapping-&gt;push_back(*var);<br />
}</p>
<p>void FormelParser::addToConstMapping(string from, double to){<br />
doubleMapping *cons = new doubleMapping::Mapping(from,to);<br />
constMapping-&gt;push_back(*cons);<br />
}</p>
<p>template&lt;class T&gt;<br />
void FormelParser::printMappings(std::vector&lt;universeMapping&gt;*&amp; mapping){<br />
std::vector&lt;universeMapping&gt;::const_iterator it;<br />
for(it=mapping-&gt;begin(); it!=mapping-&gt;end(); ++it){<br />
std::cout &lt;&lt; it-&gt;toString() &lt;&lt; std::endl;<br />
}<br />
}</p>
<p>template&lt;class T&gt; char** getNames(std::vector&lt;Mapping&lt;T&gt; &gt;*&amp; mapping){<br />
char *<em>names=0;<br />
std::vector&lt;universeMapping&gt;::iterator it;<br />
unsigned int pos;<br />
for(it=mapping-&gt;begin(), pos=0; it!=mapping-&gt;end(); ++it,++pos)<br />
names[pos]=const_cast&lt;char</em>&gt;((it-&gt;getFrom()).c_str());<br />
return names;<br />
}</p>
<p>char** FormelParser::getVarNames(){<br />
return getNames(varMapping);<br />
}</p>
<p>char** FormelParser::getConstNames(){<br />
return getNames(constMapping);<br />
}</p>
<p>int* FormelParser::getIDs(){<br />
int* ids=0;<br />
std::vector&lt;intMapping&gt;::iterator it;<br />
unsigned int pos;<br />
for(it=varMapping-&gt;begin(), pos=0; it!=varMapping-&gt;end(); ++it,++pos)<br />
ids[pos]=it-&gt;getTo();<br />
return ids;<br />
}</p>
<p>Sieht jemand von euch, was ich falsch mache?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/273293/reference-member-int-amp-mapping-lt-int-gt-to-can-t-use-default-assignment-operator</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 10:05:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/273293.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 03 Sep 2010 20:16:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to reference member ‘int&amp;amp; Mapping&amp;lt;int&amp;gt;::to’, can&#x27;t use default assignment operator on Fri, 03 Sep 2010 20:16:21 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>inzwischen habe ich zu obiger Fehlermeldung schon viel im Internet gesucht und auch das eine oder andere gefunden. So z.B. dass man in C++ einer Referenz nichts zuweisen kann, sondern diese initialisiert werden muss und anschließend nicht mehr geändert werden kann. Doch leider hilft mir dieses Wissen bei meinem konkreten Programm nicht weiter, da ich nicht sehe, wo ich was falsch mache. Ich hoffe, jemand von euch kann mir helfen.</p>
<p>Hier mein (wesentlicher) Code:</p>
<p>#include &lt;sstream&gt;</p>
<p>template&lt;class T&gt; class Mapping{<br />
private:<br />
std::string from;<br />
T&amp; to;<br />
public:<br />
Mapping(std::string&amp; f, T&amp; t):from(f),to(t){ }</p>
<p>std::string getFrom(){ return from; }</p>
<p>T&amp; getTo(){ return to; }</p>
<p>std::string toString() const{<br />
//int bzw. double to in einen string umwandeln:<br />
std::stringstream sstr;<br />
sstr &lt;&lt; to;<br />
std::string stringTo;<br />
sstr &gt;&gt; stringTo;</p>
<p>return &quot;( &quot;+from+&quot;\t-&gt;\t&quot;+stringTo+&quot; )&quot;;<br />
}<br />
};</p>
<p>FormelParser.hpp:</p>
<p>...<br />
typedef Mapping&lt;int&gt; intMapping;<br />
typedef Mapping&lt;double&gt; doubleMapping;<br />
typedef Mapping&lt;class T&gt; universeMapping;</p>
<p>FormelParser.cpp:</p>
<p>#include &quot;FormelParser.hpp&quot;</p>
<p>unsigned int pos;<br />
std::vector&lt;Mapping&lt;int&gt;* &gt; <em>varMapping;<br />
std::vector&lt;Mapping&lt;double&gt;</em> &gt; *constMapping;<br />
DdManager *mgr;<br />
std::set<a href="std::string" rel="nofollow">std::string</a> *variables;</p>
<p>...</p>
<p>DdNode* FormelParser::parseConstant(string cons){<br />
double consDouble = toDouble(cons.c_str());<br />
addToConstMapping(cons, consDouble);<br />
return Cudd_addConst(mgr,consDouble);<br />
}</p>
<p>int FormelParser::getIndex(std::vector&lt;intMapping&gt;*&amp; mapping, string var){<br />
std::vector&lt;intMapping&gt;::iterator it;<br />
for(it=mapping-&gt;begin(); it!=mapping-&gt;end(); ++it){<br />
if(var.compare(it-&gt;getFrom())==0) return it-&gt;getTo();<br />
}<br />
return -1;<br />
}</p>
<p>...</p>
<p>DdNode* FormelParser::newVariable(int p, string s){<br />
std::cout &lt;&lt; &quot;newVariable(&quot; &lt;&lt; s &lt;&lt; &quot;)&quot; &lt;&lt; endl;<br />
string variable = varName(s, p); std::cout &lt;&lt; &quot;Variable: &quot; &lt;&lt; variable &lt;&lt; endl;<br />
pos = p+variable.length();<br />
if(!isVariableName(variable)){<br />
...<br />
throw new IllegalArgumentException(err);<br />
}<br />
DdNode* res;<br />
if(variables-&gt;find(variable)!=variables-&gt;end()){//Variable schon erzeugt<br />
std::cout &lt;&lt; &quot;Variable schon erzeugt&quot; &lt;&lt; endl;<br />
int index = getIndex(varMapping, variable);<br />
res = Cudd_addIthVar(mgr,index); Cudd_Ref(res);<br />
}<br />
else{<br />
res = Cudd_addNewVar(mgr); Cudd_Ref(res);<br />
int index = Cudd_NodeReadIndex(res);<br />
intMapping *newVar = new intMapping::Mapping(variable, index);<br />
varMapping-&gt;push_back(*newVar);<br />
variables-&gt;insert(variable);<br />
}<br />
return res;<br />
}</p>
<p>...</p>
<p>FormelParser::FormelParser(DdManager *manager){<br />
pos = 0;<br />
mgr = manager;<br />
Cudd_EnableGarbageCollection(mgr);<br />
varMapping = new std::vector&lt;Mapping&lt;int&gt; &gt;();<br />
constMapping = new std::vector&lt;Mapping&lt;double&gt; &gt;();<br />
variables = new std::set<a href="std::string" rel="nofollow">std::string</a>();<br />
}</p>
<p>std::vector&lt;intMapping&gt;* FormelParser::getVarMapping(){ return varMapping; }<br />
std::vector&lt;doubleMapping&gt;* FormelParser::getConstMapping(){ return constMapping; }</p>
<p>void FormelParser::addToVarMapping(string from, int to){<br />
intMapping *var = new intMapping::Mapping(from,to);<br />
varMapping-&gt;push_back(*var);<br />
}</p>
<p>void FormelParser::addToConstMapping(string from, double to){<br />
doubleMapping *cons = new doubleMapping::Mapping(from,to);<br />
constMapping-&gt;push_back(*cons);<br />
}</p>
<p>template&lt;class T&gt;<br />
void FormelParser::printMappings(std::vector&lt;universeMapping&gt;*&amp; mapping){<br />
std::vector&lt;universeMapping&gt;::const_iterator it;<br />
for(it=mapping-&gt;begin(); it!=mapping-&gt;end(); ++it){<br />
std::cout &lt;&lt; it-&gt;toString() &lt;&lt; std::endl;<br />
}<br />
}</p>
<p>template&lt;class T&gt; char** getNames(std::vector&lt;Mapping&lt;T&gt; &gt;*&amp; mapping){<br />
char *<em>names=0;<br />
std::vector&lt;universeMapping&gt;::iterator it;<br />
unsigned int pos;<br />
for(it=mapping-&gt;begin(), pos=0; it!=mapping-&gt;end(); ++it,++pos)<br />
names[pos]=const_cast&lt;char</em>&gt;((it-&gt;getFrom()).c_str());<br />
return names;<br />
}</p>
<p>char** FormelParser::getVarNames(){<br />
return getNames(varMapping);<br />
}</p>
<p>char** FormelParser::getConstNames(){<br />
return getNames(constMapping);<br />
}</p>
<p>int* FormelParser::getIDs(){<br />
int* ids=0;<br />
std::vector&lt;intMapping&gt;::iterator it;<br />
unsigned int pos;<br />
for(it=varMapping-&gt;begin(), pos=0; it!=varMapping-&gt;end(); ++it,++pos)<br />
ids[pos]=it-&gt;getTo();<br />
return ids;<br />
}</p>
<p>Sieht jemand von euch, was ich falsch mache?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1947975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1947975</guid><dc:creator><![CDATA[Monka]]></dc:creator><pubDate>Fri, 03 Sep 2010 20:16:21 GMT</pubDate></item><item><title><![CDATA[Reply to reference member ‘int&amp;amp; Mapping&amp;lt;int&amp;gt;::to’, can&#x27;t use default assignment operator on Fri, 03 Sep 2010 20:27:18 GMT]]></title><description><![CDATA[<p>Ich helfe dir mal insofern, als dass ich deinen Code mal so formatiere, dass man ihn auch lesen kann. <strong>Aber</strong>: Das ist viel zu viel Code und du sagst noch nicht einmal wo der Fehler auftritt. Fasse dich kurz.</p>
<pre><code class="language-cpp">#include &lt;sstream&gt;

template &lt; class T &gt; class Mapping {
 private:
	std::string from;
	T &amp; to;
 public:
 Mapping(std::string &amp; f, T &amp; t):from(f), to(t) {
	}

	std::string getFrom() {
		return from;
	}

	T &amp; getTo() {
		return to;
	}

	std::string toString()const {
//int bzw. double to in einen string umwandeln:
		std::stringstream sstr;
		sstr &lt;&lt; to;
		std::string stringTo;
		sstr &gt;&gt; stringTo;

		return &quot;( &quot; + from + &quot;\t-&gt;\t&quot; + stringTo + &quot; )&quot;;
}};
</code></pre>
<p>FormelParser.hpp:</p>
<pre><code class="language-cpp">typedef Mapping &lt; int &gt;intMapping;
typedef Mapping &lt; double &gt;doubleMapping;
typedef Mapping &lt; class T &gt; universeMapping;
</code></pre>
<p>FormelParser.cpp:</p>
<pre><code class="language-cpp">#include &quot;FormelParser.hpp&quot;

unsigned int pos;
std::vector &lt; Mapping &lt; int &gt;*&gt;*varMapping;
std::vector &lt; Mapping &lt; double &gt;*&gt;*constMapping;
DdManager *mgr;
std::set &lt; std::string &gt; *variables;

DdNode * FormelParser::parseConstant(string cons)
{
	double consDouble = toDouble(cons.c_str());
	addToConstMapping(cons, consDouble);
	return Cudd_addConst(mgr, consDouble);
}

int FormelParser::getIndex(std::vector &lt; intMapping &gt; *&amp;mapping, string var)
{
	std::vector &lt; intMapping &gt;::iterator it;
	for (it = mapping-&gt;begin(); it != mapping-&gt;end(); ++it) {
		if (var.compare(it-&gt;getFrom()) == 0)
			return it-&gt;getTo();
	}
	return -1;
}

DdNode * FormelParser::newVariable(int p, string s)
{
	std::cout &lt;&lt; &quot;newVariable(&quot; &lt;&lt; s &lt;&lt; &quot;)&quot; &lt;&lt; endl;
	string variable = varName(s, p);
	std::cout &lt;&lt; &quot;Variable: &quot; &lt;&lt; variable &lt;&lt; endl;
	pos = p + variable.length();
	if (!isVariableName(variable)) {
		...throw new IllegalArgumentException(err);
	}
	DdNode *res;
	if (variables-&gt;find(variable) != variables-&gt;end()) {	//Variable schon erzeugt
		std::cout &lt;&lt; &quot;Variable schon erzeugt&quot; &lt;&lt; endl;
		int index = getIndex(varMapping, variable);
		res = Cudd_addIthVar(mgr, index);
		Cudd_Ref(res);
	} else {
		res = Cudd_addNewVar(mgr);
		Cudd_Ref(res);
		int index = Cudd_NodeReadIndex(res);
		intMapping *newVar = new intMapping::Mapping(variable, index);
		varMapping-&gt;push_back(*newVar);
		variables-&gt;insert(variable);
	}
	return res;
}

FormelParser::FormelParser(DdManager * manager)
{
	pos = 0;
	mgr = manager;
	Cudd_EnableGarbageCollection(mgr);
	varMapping = new std::vector &lt; Mapping &lt; int &gt;&gt;();
	constMapping = new std::vector &lt; Mapping &lt; double &gt;&gt;();
	variables = new std::set &lt; std::string &gt; ();
}

std::vector &lt; intMapping &gt; *FormelParser::getVarMapping()
{
	return varMapping;
}

std::vector &lt; doubleMapping &gt; *FormelParser::getConstMapping()
{
	return constMapping;
}

void FormelParser::addToVarMapping(string from, int to)
{
	intMapping *var = new intMapping::Mapping(from, to);
	varMapping-&gt;push_back(*var);
}

void FormelParser::addToConstMapping(string from, double to)
{
	doubleMapping *cons = new doubleMapping::Mapping(from, to);
	constMapping-&gt;push_back(*cons);
}

template &lt; class T &gt;
    void FormelParser::printMappings(std::vector &lt; universeMapping &gt; *&amp;mapping)
{
	std::vector &lt; universeMapping &gt;::const_iterator it;
	for (it = mapping-&gt;begin(); it != mapping-&gt;end(); ++it) {
		std::cout &lt;&lt; it-&gt;toString() &lt;&lt; std::endl;
	}
}

template &lt; class T &gt; char **getNames(std::vector &lt; Mapping &lt; T &gt; &gt;*&amp;mapping)
{
	char **names = 0;
	std::vector &lt; universeMapping &gt;::iterator it;
	unsigned int pos;
	for (it = mapping-&gt;begin(), pos = 0; it != mapping-&gt;end(); ++it, ++pos)
		names[pos] = const_cast &lt; char *&gt;((it-&gt;getFrom()).c_str());
	return names;
}

char **FormelParser::getVarNames()
{
	return getNames(varMapping);
}

char **FormelParser::getConstNames()
{
	return getNames(constMapping);
}

int *FormelParser::getIDs()
{
	int *ids = 0;
	std::vector &lt; intMapping &gt;::iterator it;
	unsigned int pos;
	for (it = varMapping-&gt;begin(), pos = 0; it != varMapping-&gt;end();
	     ++it, ++pos)
		ids[pos] = it-&gt;getTo();
	return ids;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1947977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1947977</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 03 Sep 2010 20:27:18 GMT</pubDate></item><item><title><![CDATA[Reply to reference member ‘int&amp;amp; Mapping&amp;lt;int&amp;gt;::to’, can&#x27;t use default assignment operator on Fri, 03 Sep 2010 20:56:02 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Ich helfe dir mal insofern, als dass ich deinen Code mal so formatiere, dass man ihn auch lesen kann. <strong>Aber</strong>: Das ist viel zu viel Code und du sagst noch nicht einmal wo der Fehler auftritt. Fasse dich kurz.</p>
</blockquote>
<p>Respekt, dass du dir die Arbeit machst und das ganze neu bzw. besser formatiert hast <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Für die Fehlersuche wär echt nur relevanter Code und ne Kopie der Fehlermeldung mit Zeilenangabe ganz gut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Lg freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1947991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1947991</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Fri, 03 Sep 2010 20:56:02 GMT</pubDate></item><item><title><![CDATA[Reply to reference member ‘int&amp;amp; Mapping&amp;lt;int&amp;gt;::to’, can&#x27;t use default assignment operator on Fri, 03 Sep 2010 21:24:17 GMT]]></title><description><![CDATA[<p>fr33g schrieb:</p>
<blockquote>
<p>Respekt, dass du dir die Arbeit machst und das ganze neu bzw. besser formatiert hast <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Arbeit? Welche Arbeit? Für so etwas gibt es indent <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1947998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1947998</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 03 Sep 2010 21:24:17 GMT</pubDate></item><item><title><![CDATA[Reply to reference member ‘int&amp;amp; Mapping&amp;lt;int&amp;gt;::to’, can&#x27;t use default assignment operator on Sat, 04 Sep 2010 06:40:03 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Ich helfe dir mal insofern, als dass ich deinen Code mal so formatiere, dass man ihn auch lesen kann. <strong>Aber</strong>: Das ist viel zu viel Code und du sagst noch nicht einmal wo der Fehler auftritt. Fasse dich kurz.</p>
</blockquote>
<p>Ok, dann versuche ich es noch einmal. (Ich hatte den Code schon gekürzt.)</p>
<pre><code class="language-cpp">#include &lt;sstream&gt;

template &lt; class T &gt; class Mapping {
 private:
	std::string from;
	T &amp; to;
 public:
 Mapping(std::string &amp; f, T &amp; t):from(f), to(t) {
	}

	std::string getFrom() {
		return from;
	}

	T &amp; getTo() {
		return to;
	}

	std::string toString()const {
//int bzw. double to in einen string umwandeln:
		std::stringstream sstr;
		sstr &lt;&lt; to;
		std::string stringTo;
		sstr &gt;&gt; stringTo;

		return &quot;( &quot; + from + &quot;\t-&gt;\t&quot; + stringTo + &quot; )&quot;;
}};
</code></pre>
<p>FormelParser.hpp:</p>
<pre><code class="language-cpp">#include &quot;Mapping.hpp&quot;;
...
typedef Mapping &lt; int &gt;intMapping;
typedef Mapping &lt; double &gt;doubleMapping;
typedef Mapping &lt; class T &gt; universeMapping;
...
</code></pre>
<p>FormelParser.cpp:</p>
<pre><code class="language-cpp">#include &quot;FormelParser.hpp&quot;

unsigned int pos;
std::vector &lt; Mapping &lt; int &gt;*&gt;*varMapping;
std::vector &lt; Mapping &lt; double &gt;*&gt;*constMapping;
DdManager *mgr;
std::set &lt; std::string &gt; *variables;

DdNode * FormelParser::parseConstant(string cons)
{
	...
	addToConstMapping(cons, consDouble);
	...
}

DdNode * FormelParser::newVariable(int p, string s)
{       
        ...
	DdNode *res;
	if (variables-&gt;find(variable) != variables-&gt;end()) {	//Variable schon erzeugt
          ...	
	} else {
		...
		intMapping *newVar = new intMapping::Mapping(variable, index);
		...
	}
	return res;
}

FormelParser::FormelParser(DdManager * manager)
{
	pos = 0;
	mgr = manager;
	Cudd_EnableGarbageCollection(mgr);
	varMapping = new std::vector &lt; Mapping &lt; int &gt;&gt;();
	constMapping = new std::vector &lt; Mapping &lt; double &gt;&gt;();
	variables = new std::set &lt; std::string &gt; ();
}

void FormelParser::addToVarMapping(string from, int to)
{
	intMapping *var = new intMapping::Mapping(from, to);
	varMapping-&gt;push_back(*var);
}

void FormelParser::addToConstMapping(string from, double to)
{
	doubleMapping *cons = new doubleMapping::Mapping(from, to);
	constMapping-&gt;push_back(*cons);
}

template &lt; class T &gt;
    void FormelParser::printMappings(std::vector &lt; universeMapping &gt; *&amp;mapping)
{
	std::vector &lt; universeMapping &gt;::const_iterator it;
	for (it = mapping-&gt;begin(); it != mapping-&gt;end(); ++it) {
		std::cout &lt;&lt; it-&gt;toString() &lt;&lt; std::endl;
	}
}
</code></pre>
<p>so, ich hoffe, das ist jetzt nicht mehr zu lange und dennoch sind die wesentlichen Dinge dabei.</p>
<p>Und hier jetzt noch die Fehlermeldung:</p>
<p>In file included from FormelParser.hpp:6, <strong>#include &quot;Mapping.hpp&quot;</strong><br />
from FormelParser.cpp:1:<br />
Mapping.hpp: In member function ‘Mapping&lt;int&gt;&amp; Mapping&lt;int&gt;::operator=(const Mapping&lt;int&gt;&amp;)’:<br />
Mapping.hpp:7: instantiated from ‘void std::vector&lt;_Tp, _Alloc&gt;::_M_insert_aux(__gnu_cxx::__normal_iterator&lt;typename std::_Vector_base&lt;_Tp, _Alloc&gt;::_Tp_alloc_type::pointer, std::vector&lt;_Tp, _Alloc&gt; &gt;, const _Tp&amp;) [with _Tp = Mapping&lt;int&gt;, _Alloc = std::allocator&lt;Mapping&lt;int&gt; &gt;]’<br />
/usr/include/c++/4.4/bits/stl_vector.h:741: instantiated from ‘void std::vector&lt;_Tp, _Alloc&gt;::push_back(const _Tp&amp;) [with _Tp = Mapping&lt;int&gt;, _Alloc = std::allocator&lt;Mapping&lt;int&gt; &gt;]’<br />
FormelParser.cpp:199: *<em>varMapping-&gt;push_back(<em>newVar);</em></em> instantiated from here<br />
Mapping.hpp:7: error: non-static reference member ‘int&amp; Mapping&lt;int&gt;::to’, can't use default assignment operator<br />
In file included from /usr/include/c++/4.4/vector:69,<br />
from FormelParser.hpp:7,<br />
from FormelParser.cpp:1:<br />
/usr/include/c++/4.4/bits/vector.tcc: In member function ‘void std::vector&lt;_Tp, _Alloc&gt;::_M_insert_aux(__gnu_cxx::__normal_iterator&lt;typename std::_Vector_base&lt;_Tp, _Alloc&gt;::_Tp_alloc_type::pointer, std::vector&lt;_Tp, _Alloc&gt; &gt;, const _Tp&amp;) [with _Tp = Mapping&lt;int&gt;, _Alloc = std::allocator&lt;Mapping&lt;int&gt; &gt;]’:<br />
/usr/include/c++/4.4/bits/vector.tcc:312: note: synthesized method ‘Mapping&lt;int&gt;&amp; Mapping&lt;int&gt;::operator=(const Mapping&lt;int&gt;&amp;)’ first required here<br />
In file included from FormelParser.hpp:6, <strong>#include &quot;Mapping.hpp&quot;</strong><br />
from FormelParser.cpp:1:<br />
Mapping.hpp: In member function ‘Mapping&lt;double&gt;&amp; Mapping&lt;double&gt;::operator=(const Mapping&lt;double&gt;&amp;)’:<br />
Mapping.hpp:7: instantiated from ‘void std::vector&lt;_Tp, _Alloc&gt;::_M_insert_aux(__gnu_cxx::__normal_iterator&lt;typename std::_Vector_base&lt;_Tp, _Alloc&gt;::_Tp_alloc_type::pointer, std::vector&lt;_Tp, _Alloc&gt; &gt;, const _Tp&amp;) [with _Tp = Mapping&lt;double&gt;, _Alloc = std::allocator&lt;Mapping&lt;double&gt; &gt;]’<br />
/usr/include/c++/4.4/bits/stl_vector.h:741: instantiated from ‘void std::vector&lt;_Tp, _Alloc&gt;::push_back(const _Tp&amp;) [with _Tp = Mapping&lt;double&gt;, _Alloc = std::allocator&lt;Mapping&lt;double&gt; &gt;]’<br />
FormelParser.cpp:50: instantiated from here<br />
Mapping.hpp:7: error: non-static reference member ‘double&amp; Mapping&lt;double&gt;::to’, can't use default assignment operator<br />
In file included from /usr/include/c++/4.4/vector:69,<br />
from FormelParser.hpp:7, <strong>#include &lt;vector&gt;</strong><br />
from FormelParser.cpp:1:<br />
/usr/include/c++/4.4/bits/vector.tcc: In member function ‘void std::vector&lt;_Tp, _Alloc&gt;::_M_insert_aux(__gnu_cxx::__normal_iterator&lt;typename std::_Vector_base&lt;_Tp, _Alloc&gt;::_Tp_alloc_type::pointer, std::vector&lt;_Tp, _Alloc&gt; &gt;, const _Tp&amp;) [with _Tp = Mapping&lt;double&gt;, _Alloc = std::allocator&lt;Mapping&lt;double&gt; &gt;]’:<br />
/usr/include/c++/4.4/bits/vector.tcc:312: note: synthesized method ‘Mapping&lt;double&gt;&amp; Mapping&lt;double&gt;::operator=(const Mapping&lt;double&gt;&amp;)’ first required here</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1948039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1948039</guid><dc:creator><![CDATA[Monka]]></dc:creator><pubDate>Sat, 04 Sep 2010 06:40:03 GMT</pubDate></item><item><title><![CDATA[Reply to reference member ‘int&amp;amp; Mapping&amp;lt;int&amp;gt;::to’, can&#x27;t use default assignment operator on Sat, 04 Sep 2010 07:49:05 GMT]]></title><description><![CDATA[<p>Das Problem lässt sich auf folgendes kürzen:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

struct foo {
  int&amp; ref;
  explicit foo(int&amp; r) : ref(r) {}
};

void bar(std::vector&lt;foo&gt; const&amp; x);

void wontwork() {
  int test = 42;
  std::vector&lt;foo&gt; v;
  v.push_back(foo(test));
  bar(v);
}
</code></pre>
<p><code>ref</code> , ein nicht-statisches Element von <code>foo</code> , ist eine Referenz. Deswegen generiert der Compiler keinen Zuweisungsoperator für foo. Um <code>vector&lt;T&gt;</code> benutzen zu können, muss <code>T</code> aber einen Zuweisungsoperator besitzen. Du missachtest also die Typ-Bedingungen von <code>std::vector&lt;&gt;</code> .</p>
<p>Änderst Du es so ab:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

struct foo {
  int* ptr;
  explicit foo(int&amp; r) : ptr(&amp;r) {}
};

void bar(std::vector&lt;foo&gt; const&amp; x);

void wontwork() {
  int test = 42;
  std::vector&lt;foo&gt; v;
  v.push_back(foo(test));
  bar(v);
}
</code></pre>
<p>wird es ohne Probleme kompilieren; denn hier weiß der Compiler, wie er einen Zuweisungsoperator automatisch generieren kann. Alternativ kannst Du einen eigenen Zuweisungsoperator definieren. Das wäre dann sinnvoll, wenn Deine Klasse sich selbst wie eine Art C++-Referenz verhalten soll. Ich denke aber nicht, dass es das ist, was Du wolltest.</p>
<p>Möglicherweise gibt es für das, was Du machen willst, ein viel besseres Design. Eines, was nicht so stark Java-beeinflusst ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Warum hältst Du es für nötig Referenzen bzw Zeiger zu speichern in Deiner Klasse?</p>
<p>BTW: Ich hoffe Dir ist klar, dass C++ die Objekte wie &quot;normale Variablen&quot; behandelt und einem nicht wie Java eine Indirektion (referenz&lt;-&gt;objekt) aufzwingt.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1948040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1948040</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 04 Sep 2010 07:49:05 GMT</pubDate></item><item><title><![CDATA[Reply to reference member ‘int&amp;amp; Mapping&amp;lt;int&amp;gt;::to’, can&#x27;t use default assignment operator on Sat, 04 Sep 2010 07:35:10 GMT]]></title><description><![CDATA[<p>Das ist viel Code, den man aber nicht übersetzen kann =&gt; man kann den Fehler selber nicht nachstellen, dir zu helfen ist schwierig. Wenn jemand Hilfe will, könnte man schon etwas mehr Mitarbeit erwarten.</p>
<p>Warum ist dein to in Mapping eine Referenz?</p>
<p>In</p>
<pre><code class="language-cpp">void FormelParser::addToVarMapping(string from, int to)
{
    intMapping *var = new intMapping::Mapping(from, to);
    varMapping-&gt;push_back(*var);
}
</code></pre>
<p>übergibst du einen Parameter, dessen Adresse dann gespeichert wird. Der ist aber nach verlassen der Funktion nicht mehr vorhanden.</p>
<p>Welchen Sinn soll das new hier haben, außer dass du ein memory leak implementiert hast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1948041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1948041</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 04 Sep 2010 07:35:10 GMT</pubDate></item></channel></rss>