首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ Visual“恶心的宏Hack”编译问题

C++ Visual“恶心的宏Hack”编译问题
EN

Stack Overflow用户
提问于 2013-10-31 21:14:01
回答 2查看 713关注 0票数 0

为了我自己的理解,我正在尝试重新创建向量类。我最近在Visual 2013试图编译这段代码时遇到了一个问题。对于每个“向量”关键字,我得到一个错误,该关键字声明:

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

代码语言:javascript
运行
复制
 #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");

    }

如果您需要更多的信息,请不要犹豫。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-31 21:31:51

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

代码语言:javascript
运行
复制
// disgusting macro hack to get a range checked vector:
#define vector Vector

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

要解决这个问题,您可以将类重命名为vector以外的其他内容,可以在包含std_lib_facilities.h之后重新命名类,也可以在包含std_lib_facilities.h之后重新命名类,或者根本不包括标头,而只包括#include <iostream>,因为您正在使用的标准库的唯一部分是std::cout

票数 1
EN

Stack Overflow用户

发布于 2013-10-31 21:22:47

在网上搜索时,我找到了你的头文件.包含以下内容的行:

代码语言:javascript
运行
复制
// disgusting macro hack to get a range checked vector:
#define vector Vector

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

要使用向量,只需做#include <vector>

为了增加一些澄清,头文件创建了一个名为Vector的向量类,然后#define确保vector的所有初始化都将实际引用这个Vector类。

重新命名你的班级可以帮你解决这个问题。

顺便指出,该头文件非常可怕,在使用它时要小心。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19716729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档