【问题标题】:Struct inside a Class with another Class as parameter在一个类中构造另一个类作为参数
【发布时间】:2014-03-26 03:03:53
【问题描述】:

我有一个项目要处理。 它有一个 Temp 类,它的功能很少。 然后还有另一个 Class Weather,它将数据存储在名为 Observation 的 Struct 中。这个结构有一个类型为 Temp 的字段。

Class Temp {
Temp();
Temp(string t);
string getTemp();
void setTemp(string temp); 
};

Class Weather
{ 

@贝塔

在我的天气课上 我很少有调用类 Temp 的函数

// Weather.h

public:

void record(Temp temp, float d); // error 'Temp' has not been declared
Temp getTemp() const; // 'Temp' does not name a type

 protected: 
 struct Observation 
 {
   Temp t;
   int deg;
 }; 
 Observation obs[20];
};

 // Weather.cpp 

 void Temp::record(Temp temp, float d){
 obs[i].temp = temp; 
 obs[i].deg = d;
 i++;

 }

我已尝试创建 Temp 和 Weather 的实例。 但我无法到达结构内的 Temp t。

int main(){
Temp t;
Weather w;
w.record(tt,dd); 
}

请指导我...

【问题讨论】:

    标签: c++ class struct


    【解决方案1】:

    这一行:

    obs[i].tp;
    

    没有意义,因为Observation 没有名为tp 的字段。试试这个:

    int record(Temp tp, float d){
     obs[i].t = tp; 
     obs[i].deg = d;
     i++;
    }
    
    ...
    
    int main(){
    Temp t;
    Weather w;
    int dd=7;
    w.record(t,dd); 
    }
    

    【讨论】:

    • 我已经在单独的头文件和源文件中编写了这两个类。 Weather.h 文件在其函数声明中无法识别 Temp.h……这是错误之一……我该如何解决?
    • @hakuna12:这很难说,因为你还没有向我们展示完整的代码,但我猜你在Weather.h 中忽略了#include "Temp.h"
    • 我已经包含了 Temp.h ...我不确定是否会在此处发布整个代码,因为这是我的项目。对不起。
    • @hakuna12:您不必发布整个代码(我希望您不会)。您可以发布minimal complete example,它实际上不会透露任何敏感信息,除了在您的软件开发专业知识中存在轻微令人尴尬的空白(准备这样的示例是一项非常有价值的技能,因此这是一笔不错的交易)。给我们确切的错误信息也是很好的。
    • 如果您懒得引用错误消息,或者点击链接并找出“最小完整示例”的含义,那么我没有冲动尝试解决这个问题,因为只有面包屑您提供的信息。
    【解决方案2】:

    为了让您的结构可以访问 Temp,您需要将 Temp 公开。 试试这个:

    class Temp {
    public: 
    Temp();
    Temp(string t);
    string getTemp();
    void setTemp(string temp); 
    };
    

    现在要在 main 中访问 Weather,您需要做同样的事情。

    class Weather{
    int i;
    
    public:
    // method to used to record all values
    int record(Temp tp, float d){
    obs[i].t = tp;
    obs[i].deg = d;
    i++;
    }
    

    此外,在 main 中,您使用以下行将未定义的变量传递给 Weather:

    w.record(tt,dd);
    

    【讨论】:

    • 好的,您发布的代码没有访问说明符,这将阻止您的结构能够调用 Temp 类的构造函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    相关资源
    最近更新 更多