【问题标题】:Separating interface from implementation isn't working c++将接口与实现分离不起作用c ++
【发布时间】:2017-10-16 15:54:42
【问题描述】:

嘿,我试图从实现中使用分离接口,但出错了。 不明白怎么回事。 这是我的程序 here's the error image

#include<iostream>
#include"name.h"
using namespace std;
int main()
{
    int x,y;
    cin>>x>>y;
    name n1(x,y);
    n1.getdata(x,y);
    n1.showdata();
}

现在这里是创建的头文件

#include<iostream>
using namespace std;
class name{
private:
    int a,b;
public:
    name(int x, int y);
    void getdata(int x, int y);
    int showdata();
};

&这是课程的下一部分

#include"name.h"
using namespace std;
name::name(int x, int y)
{
    a=0;
    b=0;
}
void name::getdata(int x,int y)
{
    a=x;
    b=y;
}
void name::showdata()
{
    cout<<a+b;
}

【问题讨论】:

  • 你得到哪个错误?
  • @yeasir arafat shahed 构造函数中的参数 name::name(int x, int y) { a=0; b=0; } 不使用。所以构造函数的声明没有意义。
  • 在标题中查看showdata 的原型。然后看showdata的实现。继续寻找,直到发现差异。
  • 我的 2c:name.h 错过了头球后卫;标题中的using namespace 通常是bad
  • 请把error-info放在问题里面,让大家看到。

标签: c++ object


【解决方案1】:

您的代码有很多问题。在这种情况下,最好的建议似乎是阅读good C++ book

当这不碍事时,以下是问题的简短列表,按严重性降序排列:

  • name::showdata() 声明签名不匹配区分:int showdata()void showdata()
  • 标题错过了include guard
  • 标题中的using namespacea code smell 100 次中有99 次
  • header 不需要包含&lt;iostream&gt;,将其包含在实际使用的实现文件中就足够了。

通过查看您获得的未定义引用,我还猜测 name.cpp 未构建。

我修复了一些提到的问题,只是为了让它构建: Live Demo

【讨论】:

  • 我已经尝试按照您的指示编辑了一些错误check this out,但错误仍然存​​在error
  • @yeasirarafatshahed 我猜name.cpp 没有添加到构建中。可能这是您的项目配置中的问题,而不是代码中的问题。请检查您的配置并确保添加了name.cpp
猜你喜欢
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 2016-09-05
  • 2016-08-09
  • 2016-06-28
  • 1970-01-01
相关资源
最近更新 更多