ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 在抽象类/函数上编译错误

2019-08-26 14:08:38  阅读:154  来源: 互联网

标签:c compiler-errors abstract-class


我在C抽象类(其他类需要继承和instanciate)上遇到一个奇怪的错误(缺少’;’,字符串类未被识别等).此外,我希望派生类被强制实现抽象类方法 – 因此纯虚拟= 0.

下面是我的抽象类定义.

Drawable.h:

#ifndef __myns__managers__Drawable_h__
#define __myns__managers__Drawable_h__

#include <string>

namespace myns
{
    namespace managers
    {
        class Drawable;
    }
}

namespace myns
{
    namespace managers
    {
        class Drawable
        {
            public:
                virtual float getX() = 0;
                virtual float getY() = 0;
                virtual string getImageFilePath() = 0;
            protected:
                int drawableId;

        };
    }
}

#endif

根据我对C的相关知识,我猜这一切都好,对吧?但是当我在VS 2010上编译时,它给了我一堆编译错误 – 如下所示.

我怎么解决这个问题?提前致谢.

VS构建输出:

1>------ Build started: Project: InteractiveMembranes_vc10, Configuration: X86 Debug Win32 ------
1>  OutputManager.cpp
1>(project dir)\managers\drawable.h(23): error C2146: syntax error : missing ';' before identifier 'getImageFilePath'
1>(project dir)\managers\drawable.h(23): error C2433: 'interactivemembranes::managers::Drawable::string' : 'virtual' not permitted on data declarations
1>(project dir)\managers\drawable.h(23): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>(project dir)\managers\drawable.h(23): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>(project dir)\managers\drawable.h(23): warning C4183: 'getImageFilePath': missing return type; assumed to be a member function returning 'int'
1>(project dir)\managers\drawable.h(23): error C2253: 'interactivemembranes::managers::Drawable::getImageFilePath' : pure specifier or abstract override specifier only allowed on virtual function
1>  Application.cpp
1>(project dir)\managers\drawable.h(23): error C2146: syntax error : missing ';' before identifier 'getImageFilePath'
1>(project dir)\managers\drawable.h(23): error C2433: 'interactivemembranes::managers::Drawable::string' : 'virtual' not permitted on data declarations
1>(project dir)\managers\drawable.h(23): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>(project dir)\managers\drawable.h(23): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>(project dir)\managers\drawable.h(23): warning C4183: 'getImageFilePath': missing return type; assumed to be a member function returning 'int'
1>(project dir)\managers\drawable.h(23): error C2253: 'interactivemembranes::managers::Drawable::getImageFilePath' : pure specifier or abstract override specifier only allowed on virtual function
1>  Generating Code...
1>  Compiling...
1>  TestPersistence.cpp
1>  Generating Code...
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

解决方法:

你需要限定字符串:

virtual std::string getImageFilePath() = 0;

string在std命名空间中,而不在全局命名空间中.还有使用命名空间std的选项;它会将命名空间导入全局命名空间,但不要这样做,尤其是在标题中.我只是提出它作为一个选项,但你应该总是更喜欢限定名称.

编辑:正如Als指出的那样,你只能导入你需要的东西:使用std :: string;.我仍然更喜欢这个名字.

标签:c,compiler-errors,abstract-class
来源: https://codeday.me/bug/20190826/1730540.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有