簡體   English   中英

從不同的 class 訪問 class 時遇到問題

[英]trouble with accessing a class from a different class

just started to learn c++.I'm trying new things in c++ on thing i wanted to try is to access a class from another class and change its instances and print its instance on screen.

我想知道兩件事 1)我的代碼有什么問題 2)我應該在哪里聲明 class 聲明(在主文件或 class 定義文件中?)

這是錯誤日志-

'object::carrier' uses undefined class 'sub'
 'cout': is not a member of 'std'
 'cout': undeclared identifier

這就是我想出的-source.h

#include <iostream>
#include <vector>
#include "stuff.h"

int main()
{
    object spoon(3);
    spoon.get();

}

東西.cpp

#pragma once
#include <vector>
class object;
class sub;


class object
{
private:
    std::vector <sub> thing;
public:
    object(int n);
    void get() const;
};


class sub
{
private:
    int num;
public:
    void set_num(int n);

};

東西.cpp

#include <vector>
#include "stuff.h"

// methods for object
object::object(int n)
{
    sub carrier;
    carrier.set_num(n);
}

void object::get() const
{
    std::cout << carrier.num;
}

// methods for sub




void sub::set_num(int temp_num)
{
    num = temp_num;
}

謝謝

在您的object class,特別是object::get定義中,您使用變量carrier而不在 Z31A1FD140BE4BEF2D11E18AEC

當您在構造函數中聲明變量sub carrier時,它只能在同一個 scope 中訪問,即在構造函數內部。 一旦您的程序離開 scope,變量carrier將被釋放(刪除)。

您必須將變量sub carrier作為成員添加到 class 中,如下所示:

class object
{
private:
  sub carrier

  // other stuff
}

編輯:我所以你編輯了你的問題。

您必須將cout替換為std::cout ,因為cout是 c++ 標准庫的一部分。 或者,一個不那么冗長的選項是添加using namespace std; 在每個.cpp文件的頂部。 這基本上告訴編譯器您可以使用命名空間std而無需明確說明。 但不要為.h文件這樣做。 這不是一個好主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM