0

Windows VS2010でこれを行うにはどうすればよいですか?

同じソリューションの下にある 2 つのプロジェクト: 最初のプロジェクトは、sh と j.cpp の 2 つのファイルを持つ通常のコンソール アプリケーションです。2 番目のプロジェクトは、ヘッダー ファイル jh を持つ dll アプリケーションです。

しゃ:

#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& 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& if b is 0
 double MyMathFuncs::Divide(double a, double b) const{}; 

j.cpp:

#include "s.h"
#include "j.h"

#include <iostream>
using namespace std;

int main()
{
    double a = 7.4;
    int b = 99;
    MyMathFuncs2 k;
    cout << "a + b = " <<
        k.Add(a, b) << endl;
    cout << "a - b = " <<
        k.Subtract(a, b) << endl;
    cout << "a * b = " <<
        k.Multiply(a, b) << endl;
    cout << "a / b = " <<
        k.Divide(a, b) << endl;

    try
    {
        cout << "a / 0 = " <<
            k.Divide(a, 0) << endl; 
    }
    catch (const invalid_argument &e) 
    {
        cout << "Caught exception: " << e.what() << endl; 
    }
    char c;
    cin >> c;
    return 0;
}

dll、jh:

#ifndef dllheader
#define dllheader

#include "s.h"
#include <stdexcept>

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& 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

dll はコンパイルされますが、コンソール アプリはコンパイルされません。

files (x86)\microsoft visual studio 10.0\vc\include\typeinfo(36): error C2236: unexpected 'struct' '__type_info_node'. Did you forget a ';'?
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\typeinfo(36): error C2143: syntax error : missing ';' before '{'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\typeinfo(36): error C2447: '{' : missing function header (old-style formal list?)
1>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>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>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>c:\program files (x86)\microsoft visual studio 10.0\vc\include\typeinfo(67): error C2061: syntax error : identifier '__type_info_node'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\typeinfo(74): error C2061: syntax error : ide
4

1 に答える 1

1

class MyMathFuncs2での定義の最後にj.h、次を参照してください。

}

次のように変更してみてください。

};
于 2013-04-25T22:15:13.917 に答える