I bumped in to an error when trying to overload operator =  Not sure what is wrong with the code. Thanks for help!  Here is my code:  matrix.h  namespace MATRIX{   class Matrix{       // other private methods       public:           // other public methods           template &lt; typename T &gt;           Matrix&amp; operator=(std::list&lt;T&gt; &amp; data) ;   } };   matrix.cu  namespace MATRIX{    // other definitions    template &lt; typename T &gt;    Matrix&amp; Matrix::operator=(list&lt;T&gt; &amp; data) {        // method definition    } }   test.cu  #include &lt;list&gt; #include "matrix.h" // other includes int main(void){     using namespace std;     using MATRIX::Matrix;     Matrix k_matrix;     list&lt;double&gt; k_list(100);     // initialize k_list     k_matrix = k_list; }   Build  nvcc -c matrix.cu nvcc -o test test.cu matrix.o   Error on second command     tmpxft_00001f0f_00000000-3_test.cudafe1.cpp:(.text+0x202):   undefined reference to`MATRIX::Matrix&amp; MATRIX::Matrix::operator=&lt;double&gt;   (std::list&lt;double, std::allocator&lt;double&gt; &gt;&amp;)'
341
Quote from :     The only portable way of using templates at the moment is to implement them in header files by using inline functions.   Why is this?  (Clarification: header files are not the only portable solution. But they are the most convenient portable solution.)
102686
I tried this and that, but could not solve this problem. Here is the code that produces this error:  \begin{equation} o=g(h)=\left\{\begin{array}{rcl}     1 &amp; if &amp; h &lt;   0 \\     0 &amp; if &amp; h \le 0  \end{array}\right \end{equation}   The error is given on the line \end{equation} resides. Thanks.
66985
When I run the attached code I get this error:  ************************************ Missing \endcsname inserted. &lt;to be read again&gt;                     \c@float@type  l.23 \end{algorithm} ************************************   Any help would be highly appreciated.  \documentclass[aip, amsmath, amssymb, reprint]{revtex4-1}  \usepackage{graphicx} \usepackage{dcolumn} \usepackage{bm} \usepackage{float} \usepackage{algorithm} \usepackage{algpseudocode}  \begin{document}  \begin{algorithm*}   \caption{Hello}   \label{EPSA}    \begin{algorithmic}[1]    \State $T_m= \min\limits_k (T_c(k)),  k_m= \arg\min\limits_k (T_c(k))$    \end{algorithmic} \end{algorithm*}  \end{document}
36534
Having recently introduced an overload of a method the application started to fail. Finally tracking it down, the new method is being called where I did not expect it to be.  We had  setValue( const std::wstring&amp; name, const std::wstring&amp; value );  std::wstring avalue( func() ); setValue( L"string", avalue ); std::wstring bvalue( func2() ? L"true", L"false" ); setValue( L"bool", bvalue ); setValue( L"empty", L"" );   It was changed so that when a bool value is stored we use the same strings (internal data storage of strings)  setValue( const std::wstring&amp; name, const std::wstring&amp; value ); setValue( const std::wstring&amp; name, const bool&amp; value );  std::wstring avalue( func() ); setValue( L"string", avalue ); setValue( L"bool", func2() ); setValue( L"empty", L"" ); &lt;&lt; --- this FAILS!?!   The problem with L"" is that it is implicitly casting and previously it was happy to be a std::wstring, but not it prefers to be a bool. The MSVC compiler does not complain, or raise warning, so I'm worried that even if I "fix" the setValue( L"empty", L"" ); to be  setValue( L"empty", std::wstring() );   somebody else may come later and simply use setValue( L"empty", L"" ); and have to track down this issue again.  We thought to use explicit on the method but it is not a valid keyword for this usage. Is there some way to get the compiler to complain about this, or otherwise prevent the issue?  Otherwise I'm thinking to change the name of the method which takes a bool to ensure it can't make an incorrect guess.
19841
I've been programming in C++ for a few years, and I've used STL quite a bit and have created my own template classes a few times to see how it's done.  Now I'm trying to integrate templates deeper into my OO design, and a nagging thought keeps coming back to me: They're just a macros, really... You could implement (rather UGLY) auto_ptrs using #defines, if you really wanted to.  This way of thinking about templates helps me understand how my code will actually work, but I feel that I must be missing the point somehow. Macros are meant evil incarnate, yet "template metaprogramming" is all the rage.  So, what ARE the real distinctions? and how can templates avoid the dangers that #define leads you into, like   Inscrutable compiler errors in places where you don't expect them? Code bloat?  Difficulty in tracing code? Setting Debugger Breakpoints?
701
Is there a reason why passing a reference to a std::map as const causes the [] operator to break? I get this compiler error (gcc 4.2) when I use const:     error: no match for ‘operator[]’ in   ‘map[name]’   Here's the function prototype:  void func(const char ch, std::string &amp;str, const std::map&lt;std::string, std::string&gt; &amp;map);   And, I should mention that there is no problem when I remove the const keyword in front of std::map.  If I've been instructed correctly, the [] operator will actually insert a new pair into the map if it doesn't find the key, which would of course explain why this happens, but I can't imagine that this would ever be acceptable behavior.  If there is a better method, like using find instead of [], I'd appreciate it. I can't seem to get find to work either though... I receive const mismatched iterator errors.
118553
In C++ I can't use a method if I declare it after the calling method.    Does this order matter in other languages like Java or C#?
40034
Coming from C++ to Java, the obvious unanswered question is why didn't Java include operator overloading?  Isn't Complex a, b, c; a = b + c; much simpler than Complex a, b, c; a = b.add(c);?  Is there a known reason for this, valid arguments for not allowing operator overloading? Is the reason arbitrary, or lost to time?
94655
I was experimenting with C++ and found the below code as very strange.   class Foo{ public:     virtual void say_virtual_hi(){         std::cout &lt;&lt; "Virtual Hi";     }      void say_hi()     {         std::cout &lt;&lt; "Hi";     } };  int main(int argc, char** argv) {     Foo* foo = 0;     foo-&gt;say_hi(); // works well     foo-&gt;say_virtual_hi(); // will crash the app     return 0; }   I know that the virtual method call crashes because it requires a vtable lookup and can only work with valid objects.   I have the following questions    How does the non virtual method say_hi work on a NULL pointer? Where does the object foo get allocated?   Any thoughts?
67882
I am using the  and trying to create a table of 4 columns.   I get the error mentioned in the title of the question. I know the standard reasons why this error can occur.   But my question is: Is it possible that the template or .cls file is controlling the maximum number of columns in a table ? If it were, would I get a different error than this?
21871
I am trying to pass a reference to a two-dimensional array to a function in C++. I know the size of both dimensions at compile time. Here is what I have right now:  const int board_width = 80; const int board_height = 80; void do_something(int[board_width][board_height]&amp; array);  //function prototype   But this doesn't work. I get this error from g++:  error: expected ‘,’ or ‘...’ before ‘*’ token   What does this error mean, and how can I fix it?
244
How does the comma operator work in C++?  For instance, if I do:  a = b, c;     Does a end up equaling b or c?   (Yes, I know this is easy to test - just documenting on here for someone to find the answer quickly.)  Update:  This question has exposed a nuance when using the comma operator.  Just to document this:  a = b, c;    // a is set to the value of b!  a = (b, c);  // a is set to the value of c!   This question was actually inspired by a typo in code.  What was intended to be  a = b; c = d;   Turned into  a = b,    //  &lt;-  Note comma typo! c = d;
15322
I come from a Java background, where packages are used, not namespaces. I'm used to putting classes that work together to form a complete object into packages, and then reusing them later from that package. But now I'm working in C++.  How do you use namespaces in C++? Do you create a single namespace for the entire application, or do you create namespaces for the major components? If so, how do you create objects from classes in other namespaces?
1488
Can anyone explain why following code won't compile? At least on g++ 4.2.4.  And more interesting, why it will compile when I cast MEMBER to int?  #include &lt;vector&gt;  class Foo {   public:       static const int MEMBER = 1;   };  int main(){       vector&lt;int&gt; v;       v.push_back( Foo::MEMBER );       // undefined reference to `Foo::MEMBER'     v.push_back( (int) Foo::MEMBER ); // OK       return 0; }
81218
I am trying to do a new environment or command (i tried both) where i can put in the name, description and code of a Method in c++ and it gives me a new section with the MethodName, the code listed and the description below. But i am not able to use the listings environment in a new command or new environment.. Consider my MWE   \documentclass[a4paper,11pt]{article} \usepackage{listings}  \newcommand{\method}[3] { \section{#1}\label{#1} \begin{lstlisting} #2 \end{lstlisting} #3 }   \begin{document}  \method{MethodName}{Method Void MethodName()}{Description of the Method blablabla}  \end{document}   How can I fix this?   I would prefer to do it using a macro since I don't need an ending.
107003
I'm working on a sparse matrix class that needs to use an array of LinkedList to store the values of a matrix. Each element of the array (i.e. each LinkedList) represents a row of the matrix. And, each element in the LinkedList array represents a column and the stored value.  In my class, I have a declaration of the array as:  private LinkedList&lt;IntegerNode&gt;[] myMatrix;   And, in my constructor for the SparseMatrix, I try to define:  myMatrix = new LinkedList&lt;IntegerNode&gt;[numRows];   The error I end up getting is     Cannot create a generic array of LinkedList&lt;IntegerNode&gt;.   So, I have two issues with this:   What am I doing wrong, and Why is the type acceptable in the declaration for the array if it can't be created?   IntegerNode is a class that I have created. And, all of my class files are packaged together.
65248
I'm getting errors in a matrix equation. When I compile it looks fine, but I'd like to fix them so I don't have to press return for every error at compile time. The code for the equation is:  \begin{equation*}  \begin{bmatrix} U(1,t)  &amp; \cdots &amp; U(n,t) \\  \vdots &amp; \ddots &amp; \vdots \\ O_{n1} &amp; \cdots &amp; O_{nn}  \end{bmatrix} \times \begin{bmatrix} W(1,1)  &amp; \cdots &amp; W(1,n) \\  \vdots &amp; \ddots &amp; \vdots \\  W(n,1) &amp; \cdots &amp; W(n,n)  \end{bmatrix} = \begin{bmatrix}  D(1,t)  &amp; \cdots &amp; D(n,t) \\ \vdots &amp; \ddots &amp; \vdots \\ I_{n1} &amp; \cdots &amp; I_{nn} \end{bmatrix}  \end{equation*}   The errors I'm getting are related to missing $'s inserted.