Note that there are some explanatory texts on larger screens.

plurals
  1. POc++ implement virtual class defined outside dll,in dll
    text
    copied!<p>How can you do this in Windows VS2010?</p> <p>2 projects under the same solution: the first one is a regular console application with two files: s.h, and j.cpp. The second project is a dll application with one header file: j.h</p> <p>s.h:</p> <pre><code>#ifndef M #define M class MyMathFuncs { public: // Returns a + b virtual double Add(double a, double b) const = 0; // Returns a - b virtual double Subtract(double a, double b) const = 0; // Returns a * b virtual double Multiply(double a, double b) const = 0; // Returns a / b // Throws const std::invalid_argument&amp; if b is 0 virtual double Divide(double a, double b) const = 0; }; double MyMathFuncs::Add(double a, double b) const{}; // Returns a - b double MyMathFuncs::Subtract(double a, double b) const{}; // Returns a * b double MyMathFuncs::Multiply(double a, double b) const{}; // Returns a / b // Throws const std::invalid_argument&amp; if b is 0 double MyMathFuncs::Divide(double a, double b) const{}; </code></pre> <p>j.cpp:</p> <pre><code>#include "s.h" #include "j.h" #include &lt;iostream&gt; using namespace std; int main() { double a = 7.4; int b = 99; MyMathFuncs2 k; cout &lt;&lt; "a + b = " &lt;&lt; k.Add(a, b) &lt;&lt; endl; cout &lt;&lt; "a - b = " &lt;&lt; k.Subtract(a, b) &lt;&lt; endl; cout &lt;&lt; "a * b = " &lt;&lt; k.Multiply(a, b) &lt;&lt; endl; cout &lt;&lt; "a / b = " &lt;&lt; k.Divide(a, b) &lt;&lt; endl; try { cout &lt;&lt; "a / 0 = " &lt;&lt; k.Divide(a, 0) &lt;&lt; endl; } catch (const invalid_argument &amp;e) { cout &lt;&lt; "Caught exception: " &lt;&lt; e.what() &lt;&lt; endl; } char c; cin &gt;&gt; c; return 0; } </code></pre> <p>in dll, j.h:</p> <pre><code>#ifndef dllheader #define dllheader #include "s.h" #include &lt;stdexcept&gt; class MyMathFuncs2: public MyMathFuncs { public: __declspec(dllexport) double Add(double a, double b) const { return a + b; } // Returns a - b __declspec(dllexport) double Subtract(double a, double b) const { return a - b; } // Returns a * b __declspec(dllexport) double Multiply(double a, double b) const { return a * b * b * b; } // Returns a / b // Throws const std::invalid_argument&amp; if b is 0 __declspec(dllexport) double Divide(double a, double b) const { if (b == 0) { //throw invalid_argument("b cannot be zero!"); } return a / b; } } #endif </code></pre> <p>The dll compiles but the console app does not:</p> <pre><code>files (x86)\microsoft visual studio 10.0\vc\include\typeinfo(36): error C2236: unexpected 'struct' '__type_info_node'. Did you forget a ';'? 1&gt;c:\program files (x86)\microsoft visual studio 10.0\vc\include\typeinfo(36): error C2143: syntax error : missing ';' before '{' 1&gt;c:\program files (x86)\microsoft visual studio 10.0\vc\include\typeinfo(36): error C2447: '{' : missing function header (old-style formal list?) 1&gt;c:\program files (x86)\microsoft visual studio 10.0\vc\include\typeinfo(41): error C2146: syntax error : missing ';' before identifier '__type_info_root_node' 1&gt;c:\program files (x86)\microsoft visual studio 10.0\vc\include\typeinfo(41): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1&gt;c:\program files (x86)\microsoft visual studio 10.0\vc\include\typeinfo(41): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1&gt;c:\program files (x86)\microsoft visual studio 10.0\vc\include\typeinfo(67): error C2061: syntax error : identifier '__type_info_node' 1&gt;c:\program files (x86)\microsoft visual studio 10.0\vc\include\typeinfo(74): error C2061: syntax error : ide </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload