创建c ++库的多个实例

时间:2017-01-19 16:38:14

标签: c++

我正在尝试创建我编写的静态c ++库的多个实例,但是我无法创建它的多个实例...当我创建两个实例并向它们写入不同的数据时,我会读取相同的数据来自两个实例。这是我的代码:

.cpp文件:

    // MathFuncsLib.cpp
// compile with: cl /c /EHsc MathFuncsLib.cpp
// post-build command: lib MathFuncsLib.obj
/*
DECLARING VECTORS
|3,6,4|
|9,1,5|
|2,0,2|
|5,3,6|
Should be inputted as:
int a[] = {3,6,4,9,1,5,2,0,2,5,3,6} with x = 3 and y = 4

Inputting training vals:
|0.1 (inp1),0.1 (inp2) ,0.1 (targeted output)| depends on the number of inputs and outputs
|9,1,5|
|2,0,2|
|5,3,6|
*/
//#include "stdafx.h"
#include "vector.h"
#include "iostream"
#define DEBUG
#include <stdexcept>
//using namespace std;

    double* vectorLib::arrayPtr;
    int vectorLib::x;
    int vectorLib::y;

    vectorLib::vectorLib(int xInp, int yInp) {
        vectorLib::arrayPtr = new double[xInp*yInp];
        vectorLib::x = xInp;
        vectorLib::y = yInp;
        //return 0;
    }

    double vectorLib::sigmoid(double inp) {
        return 1 / (1 + exp(-inp));
    }

    double* vectorLib::getArrayPtr() {
        return vectorLib::arrayPtr;
    }

    double vectorLib::read(int xInp, int yInp) {
#ifdef DEBUG
        if (xInp >= vectorLib::x) {
            std::cout << "X_OUT_OF_BOUNDS_VECTOR_READ\n";
            while (1);
        }
        if (yInp >= vectorLib::y) {
            std::cout << "X_OUT_OF_BOUNDS_VECTOR_READ\n";
            while (1);
        }
#endif // DEBUG
        return *(arrayPtr + xInp + vectorLib::x*yInp);
    }

    void vectorLib::write(int xInp, int yInp, double data) {
#ifdef DEBUG
        if (xInp >= vectorLib::x) {
            std::cout << "X_OUT_OF_BOUNDS_VECTOR_WRITE\n";
            while (1);
        }
        if (yInp >= vectorLib::y) {
            std::cout << "X_OUT_OF_BOUNDS_VECTOR_WRITE\n";
            while (1);
        }
#endif // DEBUG
        vectorLib::arrayPtr[xInp + vectorLib::x*yInp] = data;
    }

    void vectorLib::writeArr(double* inpArr) {
        int i;
        for (i = 0; i < vectorLib::x*vectorLib::y; i++) {
            vectorLib::arrayPtr[i] = *(inpArr + i);
        }
    }

    void vectorLib::sigmoidVect() {
        int yy;
        int xx;
        for (yy = 0; yy < vectorLib::y; yy++) {
            for (xx = 0; xx < vectorLib::x; xx++) {
                write(xx, yy, sigmoid(read(xx, yy)));
            }
        }
        write(0, vectorLib::y - 1, 1);
    }

    int vectorLib::getX() {
        return vectorLib::x;
    }

    int vectorLib::getY() {
        return vectorLib::y;
    }

    int vectorLib::totalVectSize() {
        return vectorLib::x * vectorLib::y;
    }

    void vectorLib::printVector() {
        int yy;
        int xx;
        for (yy = 0; yy < y; yy++) {
            for (xx = 0; xx < x; xx++) {
                std::cout << vectorLib::read(xx, yy);
                if (xx + 1 != x) {
                    std::cout << ",";
                }
            }
            std::cout << "\n";
        }
    }

    vectorLib* vectorLib::vectorMult(vectorLib* vect1, vectorLib* vect2) {
#ifdef DEBUG
        if (vect1->getX() != vect2->getY()) {
            std::cout << "INPUTS_DONT_MATCH_VECTORMULT\n";
            while (1);
        }
#endif // DEBUG
        vectorLib toRet(vect1->getX(), vect2->getY());
        int i;
        for (i = 0; i < vect2->getX(); i++) {
            int p;
            for (p = 0; p < vect1->getY(); p++) {
                double tempOut = 0;
                int q;
                for (q = 0; q < vect1->getX(); q++)
                {
                    tempOut += vect1->read(q, p) * vect2->read(i, q);
                }
                toRet.write(i, p, tempOut);
            }
        }

        return &toRet;
    }

.h文件:

    //#include "stdafx.h"

using namespace std;
    class vectorLib
    {
        //int x, y;
    public:
        static double* arrayPtr;
        static int x;
        static int y;
        //Constructor takes x and y of the vector
        vectorLib(int xInp, int yInp);
        //The pointer to the array that holds all the doubles in the vector
        static double* getArrayPtr();
        //Read the vector at a specified x and y
        static double read(int xInp, int yInp);
        //Write one double to a specific location
        static void write(int xInp, int yInp, double data);
        //Write the array inside the vector class
        static void writeArr(double* inpArr);
        //Takes sigmoid of whole vector
        static void sigmoidVect();
        //Returns x of vector
        static int getX();
        //Returns y of vector
        static int getY();
        //Returns total size of vector
        static int totalVectSize();
        //Returns a vector pointer to the multiplication result
        static vectorLib* vectorMult(vectorLib* vect1, vectorLib* vect2);
        //Prints vector
        static void printVector();
    private:
        static double sigmoid(double inp);
    };

主档案:

    #define DEBUG
#include "stdafx.h"
#include "vector.h"
#include "iostream"

using namespace std;

int main()
{
    vectorLib testVectLol(1, 3);
    vectorLib testVect(3, 4);
    double vectInp[] = { 1,1,1,
                        1,1,1,
                        1,1,1,
                        1,1,1};
    double vectInp2[] = { 0.5,0.5,0.5 };
    testVect.writeArr(vectInp);
    testVectLol.writeArr(vectInp2);

    testVect.printVector();// Both print 0.5, 0.5, 0,5
    testVectLol.printVector();// Both print 0.5, 0.5, 0,5
    while (1);
    return 0;
}

提前致谢!我已经挣扎了几个小时。我真的很感激任何帮助!

碧玉

0 个答案:

没有答案