0

我正在尝试重新创建矢量类以供我自己理解。我最近在尝试编译此代码时遇到了 Visual Studio 2013 的问题。对于每个“向量”关键字,我都收到一个错误消息:

在此处输入图像描述

我不知道这是我的类定义中的范围错误还是其他原因。我没有玩过任何设置。

 #include "../../../std_lib_facilities.h"

    class vector{
        int sz;
        double* elem; //pointer to the first element (of type double)

    public:
        vector(int s) :sz(s), //constructor - allocates s doubles , :size(s) is a 'initilization list'
            elem(new double[s])
        {
            for (int i = 0; i < s; i++)
                elem[i] = 0; //initialize elements

        }

        int size() const
        {
            return sz;
        }

        //read
        double get(int n)
        {
            return elem[n];
        }

        //write
        void set(int n, double v)
        {
            elem[n] = v;
        }


        //Every class that owns a resource needs a destructor
        ~vector() //destructor
        {
            delete[] elem; // free memory
        }

    };


    int main(int argc)
    {
        vector v(5);
        for (int i = 0; i < v.size(); i++){
            v.set(i, i);
            cout << "v[" << i << "]==" << v.get(i) << '\n';
        }
        system("PAUSE");

    }

如果您需要更多信息,请随时询问。

4

2 回答 2

1

在线搜索时,我找到了您的头文件...其中包含以下行:

// disgusting macro hack to get a range checked vector:
#define vector Vector

我不知道你为什么使用它,但这是你的问题的原因。

要使用向量,您需要做的就是#include <vector>

为了添加一些说明,头文件创建了一个称为向量类Vector,然后#define确保所有初始化都vector将实际引用Vector该类。

重命名您的班级将为您解决这个问题。

附带说明,该头文件很糟糕,使用时要小心。

于 2013-10-31T21:22:47.823 回答
1

我假设std_lib_facilities.h您所包含的。该文件包含一个宏

// disgusting macro hack to get a range checked vector:
#define vector Vector

vector这会导致代码中所有以下出现的Vector. 因此,当您声明它时,class vector它会更改为class Vector,并且由于您包含的标头已经声明了一个名为 的模板类型Vector,您可能会收到重新定义的符号错误。此外,在 main 中,当您声明vector v(5);它时,它会更改为Vector v(5),并且由于Vector声明的原始类std_lib_facilities.h需要模板参数,因此您会在问题中收到有关缺少模板参数的错误消息。

要解决这个问题,您可以将您的类重命名为其他名称vector,您可以#undef vector在包含之后std_lib_facilities.h,或者您根本无法包含该标头,#include <iostream>因为您使用的标准库的唯一部分是std::cout.

于 2013-10-31T21:31:51.203 回答