Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 试图从另一个类访问变量_C++ - Fatal编程技术网

C++ 试图从另一个类访问变量

C++ 试图从另一个类访问变量,c++,C++,我有一个问题,从我的原始类中获取变量以在另一个类方法中打印 我的问题的快速示例: 假设变量是在test.h文件中声明的: class player{ private: int x = 10; void setX(); //method for setting X from user input int getX(); //Method for retrieving variable } 然后在另一个类方法中,我想打印X class inTheWoods{ public: printInf

我有一个问题,从我的原始类中获取变量以在另一个类方法中打印 我的问题的快速示例:

假设变量是在test.h文件中声明的:

class player{
private:
int x = 10;
void setX(); //method for setting X from user input
int getX(); //Method for retrieving variable
}
然后在另一个类方法中,我想打印X

 class inTheWoods{
 public:
 printInfo();
 }
test.cpp文件:

void player::setX(){
cout << "Set X to a number:" << endl;
cin >> x
}

int player::getX(){
return x;
} 


int inTheWoods::printInfo(){
player playerObj; //Player object to access methods in player class
cout << playerObj.getX();
}

每当我运行类似于这个问题的程序时,int不能正确显示,并抛出一个奇怪的负数。我希望这不是太多的代码,并且我正确地记录了所有内容

如果您希望这些类位于单独的文件中,那么它仍然可以工作:

Main.cpp

#include <iostream>
#include "inTheWoods.h"


int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "Player.h"

void Player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> x;
}

int Player::getX()
{
    return x;
}
#include "inTheWoods.h"

void inTheWoods::printInfo()
{
    Player playerObj; //Player object to access methods in player class
    std::cout << playerObj.getX();
}
#include <iostream>
#include "inTheWoods.h"

int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "player.h"
#include <iostream>

player::player()              // defualt constructor
    :m_x(0) {}

player::player(const int& x)
    :m_x(x) {}                // parameterised

void player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> m_x;
}

const int& player::getX()const
{
    return m_x;
}
#include "inTheWoods.h"
#include "player.h"
#include <iostream>
inTheWoods::inTheWoods() {}

inTheWoods::~inTheWoods() {}

void inTheWoods::printInfo()
{
    //Player object to access methods in player class
    player playerObj;      // will beinitialized with 0
    player playerObj2(10); // will beinitialized with 10
    std::cout << playerObj.getX() <<std::endl;
    std::cout << playerObj2.getX() <<std::endl;
}
#包括
#包括“inTheWoods.h”
int main()
{
伍德索布;
printInfo();
返回0;
}
Player.h

#pragma once
#include <iostream>
class Player
{
    int x = 10;
    void setX();
public:
    int getX();
};
//#pragma once
#include "Player.h"
#include <iostream>

class inTheWoods
{
public:
    void printInfo();
};
#pragma once

class player
{
private:
    int m_x;
public:
    player();
    player(const int& x);

    void setX();            //method for setting X from user input
    const int& getX()const; //Method for retrieving variable
};
#pragma once

class inTheWoods
{
public:
    inTheWoods();
    ~inTheWoods();
    void printInfo();
};
#pragma一次
#包括
职业选手
{
int x=10;
void setX();
公众:
int getX();
};
Player.cpp

#include <iostream>
#include "inTheWoods.h"


int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "Player.h"

void Player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> x;
}

int Player::getX()
{
    return x;
}
#include "inTheWoods.h"

void inTheWoods::printInfo()
{
    Player playerObj; //Player object to access methods in player class
    std::cout << playerObj.getX();
}
#include <iostream>
#include "inTheWoods.h"

int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "player.h"
#include <iostream>

player::player()              // defualt constructor
    :m_x(0) {}

player::player(const int& x)
    :m_x(x) {}                // parameterised

void player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> m_x;
}

const int& player::getX()const
{
    return m_x;
}
#include "inTheWoods.h"
#include "player.h"
#include <iostream>
inTheWoods::inTheWoods() {}

inTheWoods::~inTheWoods() {}

void inTheWoods::printInfo()
{
    //Player object to access methods in player class
    player playerObj;      // will beinitialized with 0
    player playerObj2(10); // will beinitialized with 10
    std::cout << playerObj.getX() <<std::endl;
    std::cout << playerObj2.getX() <<std::endl;
}
#包括“Player.h”
void Player::setX()
{
std::cout x;
}
int-Player::getX()
{
返回x;
}
在树林中.h

#pragma once
#include <iostream>
class Player
{
    int x = 10;
    void setX();
public:
    int getX();
};
//#pragma once
#include "Player.h"
#include <iostream>

class inTheWoods
{
public:
    void printInfo();
};
#pragma once

class player
{
private:
    int m_x;
public:
    player();
    player(const int& x);

    void setX();            //method for setting X from user input
    const int& getX()const; //Method for retrieving variable
};
#pragma once

class inTheWoods
{
public:
    inTheWoods();
    ~inTheWoods();
    void printInfo();
};
/#pragma一次
#包括“Player.h”
#包括
森林里的阶级
{
公众:
void printInfo();
};
inTheWoods.cpp

#include <iostream>
#include "inTheWoods.h"


int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "Player.h"

void Player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> x;
}

int Player::getX()
{
    return x;
}
#include "inTheWoods.h"

void inTheWoods::printInfo()
{
    Player playerObj; //Player object to access methods in player class
    std::cout << playerObj.getX();
}
#include <iostream>
#include "inTheWoods.h"

int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "player.h"
#include <iostream>

player::player()              // defualt constructor
    :m_x(0) {}

player::player(const int& x)
    :m_x(x) {}                // parameterised

void player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> m_x;
}

const int& player::getX()const
{
    return m_x;
}
#include "inTheWoods.h"
#include "player.h"
#include <iostream>
inTheWoods::inTheWoods() {}

inTheWoods::~inTheWoods() {}

void inTheWoods::printInfo()
{
    //Player object to access methods in player class
    player playerObj;      // will beinitialized with 0
    player playerObj2(10); // will beinitialized with 10
    std::cout << playerObj.getX() <<std::endl;
    std::cout << playerObj2.getX() <<std::endl;
}
#包括“inTheWoods.h”
void inTheWoods::printInfo()
{
Player playerbj;//访问Player类中方法的Player对象

std::cout如果您希望类位于单独的文件中,它仍然可以工作:

Main.cpp

#include <iostream>
#include "inTheWoods.h"


int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "Player.h"

void Player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> x;
}

int Player::getX()
{
    return x;
}
#include "inTheWoods.h"

void inTheWoods::printInfo()
{
    Player playerObj; //Player object to access methods in player class
    std::cout << playerObj.getX();
}
#include <iostream>
#include "inTheWoods.h"

int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "player.h"
#include <iostream>

player::player()              // defualt constructor
    :m_x(0) {}

player::player(const int& x)
    :m_x(x) {}                // parameterised

void player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> m_x;
}

const int& player::getX()const
{
    return m_x;
}
#include "inTheWoods.h"
#include "player.h"
#include <iostream>
inTheWoods::inTheWoods() {}

inTheWoods::~inTheWoods() {}

void inTheWoods::printInfo()
{
    //Player object to access methods in player class
    player playerObj;      // will beinitialized with 0
    player playerObj2(10); // will beinitialized with 10
    std::cout << playerObj.getX() <<std::endl;
    std::cout << playerObj2.getX() <<std::endl;
}
#包括
#包括“inTheWoods.h”
int main()
{
伍德索布;
printInfo();
返回0;
}
Player.h

#pragma once
#include <iostream>
class Player
{
    int x = 10;
    void setX();
public:
    int getX();
};
//#pragma once
#include "Player.h"
#include <iostream>

class inTheWoods
{
public:
    void printInfo();
};
#pragma once

class player
{
private:
    int m_x;
public:
    player();
    player(const int& x);

    void setX();            //method for setting X from user input
    const int& getX()const; //Method for retrieving variable
};
#pragma once

class inTheWoods
{
public:
    inTheWoods();
    ~inTheWoods();
    void printInfo();
};
#pragma一次
#包括
职业选手
{
int x=10;
void setX();
公众:
int getX();
};
Player.cpp

#include <iostream>
#include "inTheWoods.h"


int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "Player.h"

void Player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> x;
}

int Player::getX()
{
    return x;
}
#include "inTheWoods.h"

void inTheWoods::printInfo()
{
    Player playerObj; //Player object to access methods in player class
    std::cout << playerObj.getX();
}
#include <iostream>
#include "inTheWoods.h"

int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "player.h"
#include <iostream>

player::player()              // defualt constructor
    :m_x(0) {}

player::player(const int& x)
    :m_x(x) {}                // parameterised

void player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> m_x;
}

const int& player::getX()const
{
    return m_x;
}
#include "inTheWoods.h"
#include "player.h"
#include <iostream>
inTheWoods::inTheWoods() {}

inTheWoods::~inTheWoods() {}

void inTheWoods::printInfo()
{
    //Player object to access methods in player class
    player playerObj;      // will beinitialized with 0
    player playerObj2(10); // will beinitialized with 10
    std::cout << playerObj.getX() <<std::endl;
    std::cout << playerObj2.getX() <<std::endl;
}
#包括“Player.h”
void Player::setX()
{
std::cout x;
}
int-Player::getX()
{
返回x;
}
在树林中.h

#pragma once
#include <iostream>
class Player
{
    int x = 10;
    void setX();
public:
    int getX();
};
//#pragma once
#include "Player.h"
#include <iostream>

class inTheWoods
{
public:
    void printInfo();
};
#pragma once

class player
{
private:
    int m_x;
public:
    player();
    player(const int& x);

    void setX();            //method for setting X from user input
    const int& getX()const; //Method for retrieving variable
};
#pragma once

class inTheWoods
{
public:
    inTheWoods();
    ~inTheWoods();
    void printInfo();
};
/#pragma一次
#包括“Player.h”
#包括
森林里的阶级
{
公众:
void printInfo();
};
inTheWoods.cpp

#include <iostream>
#include "inTheWoods.h"


int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "Player.h"

void Player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> x;
}

int Player::getX()
{
    return x;
}
#include "inTheWoods.h"

void inTheWoods::printInfo()
{
    Player playerObj; //Player object to access methods in player class
    std::cout << playerObj.getX();
}
#include <iostream>
#include "inTheWoods.h"

int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "player.h"
#include <iostream>

player::player()              // defualt constructor
    :m_x(0) {}

player::player(const int& x)
    :m_x(x) {}                // parameterised

void player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> m_x;
}

const int& player::getX()const
{
    return m_x;
}
#include "inTheWoods.h"
#include "player.h"
#include <iostream>
inTheWoods::inTheWoods() {}

inTheWoods::~inTheWoods() {}

void inTheWoods::printInfo()
{
    //Player object to access methods in player class
    player playerObj;      // will beinitialized with 0
    player playerObj2(10); // will beinitialized with 10
    std::cout << playerObj.getX() <<std::endl;
    std::cout << playerObj2.getX() <<std::endl;
}
#包括“inTheWoods.h”
void inTheWoods::printInfo()
{
Player playerbj;//访问Player类中方法的Player对象

std::cout这是一个有效的方法。为了创建具有一些默认值的实例,提供构造函数始终是一个很好的做法。下面的代码有望根据您的要求工作:

main.cpp

#include <iostream>
#include "inTheWoods.h"


int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "Player.h"

void Player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> x;
}

int Player::getX()
{
    return x;
}
#include "inTheWoods.h"

void inTheWoods::printInfo()
{
    Player playerObj; //Player object to access methods in player class
    std::cout << playerObj.getX();
}
#include <iostream>
#include "inTheWoods.h"

int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "player.h"
#include <iostream>

player::player()              // defualt constructor
    :m_x(0) {}

player::player(const int& x)
    :m_x(x) {}                // parameterised

void player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> m_x;
}

const int& player::getX()const
{
    return m_x;
}
#include "inTheWoods.h"
#include "player.h"
#include <iostream>
inTheWoods::inTheWoods() {}

inTheWoods::~inTheWoods() {}

void inTheWoods::printInfo()
{
    //Player object to access methods in player class
    player playerObj;      // will beinitialized with 0
    player playerObj2(10); // will beinitialized with 10
    std::cout << playerObj.getX() <<std::endl;
    std::cout << playerObj2.getX() <<std::endl;
}
player.cpp

#include <iostream>
#include "inTheWoods.h"


int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "Player.h"

void Player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> x;
}

int Player::getX()
{
    return x;
}
#include "inTheWoods.h"

void inTheWoods::printInfo()
{
    Player playerObj; //Player object to access methods in player class
    std::cout << playerObj.getX();
}
#include <iostream>
#include "inTheWoods.h"

int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "player.h"
#include <iostream>

player::player()              // defualt constructor
    :m_x(0) {}

player::player(const int& x)
    :m_x(x) {}                // parameterised

void player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> m_x;
}

const int& player::getX()const
{
    return m_x;
}
#include "inTheWoods.h"
#include "player.h"
#include <iostream>
inTheWoods::inTheWoods() {}

inTheWoods::~inTheWoods() {}

void inTheWoods::printInfo()
{
    //Player object to access methods in player class
    player playerObj;      // will beinitialized with 0
    player playerObj2(10); // will beinitialized with 10
    std::cout << playerObj.getX() <<std::endl;
    std::cout << playerObj2.getX() <<std::endl;
}
inTheWoods.cpp

#include <iostream>
#include "inTheWoods.h"


int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "Player.h"

void Player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> x;
}

int Player::getX()
{
    return x;
}
#include "inTheWoods.h"

void inTheWoods::printInfo()
{
    Player playerObj; //Player object to access methods in player class
    std::cout << playerObj.getX();
}
#include <iostream>
#include "inTheWoods.h"

int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "player.h"
#include <iostream>

player::player()              // defualt constructor
    :m_x(0) {}

player::player(const int& x)
    :m_x(x) {}                // parameterised

void player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> m_x;
}

const int& player::getX()const
{
    return m_x;
}
#include "inTheWoods.h"
#include "player.h"
#include <iostream>
inTheWoods::inTheWoods() {}

inTheWoods::~inTheWoods() {}

void inTheWoods::printInfo()
{
    //Player object to access methods in player class
    player playerObj;      // will beinitialized with 0
    player playerObj2(10); // will beinitialized with 10
    std::cout << playerObj.getX() <<std::endl;
    std::cout << playerObj2.getX() <<std::endl;
}

这是一个有效的方法。为了创建具有一些默认值的实例,提供构造函数始终是一个很好的做法。下面的代码有望根据您的要求工作:

main.cpp

#include <iostream>
#include "inTheWoods.h"


int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "Player.h"

void Player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> x;
}

int Player::getX()
{
    return x;
}
#include "inTheWoods.h"

void inTheWoods::printInfo()
{
    Player playerObj; //Player object to access methods in player class
    std::cout << playerObj.getX();
}
#include <iostream>
#include "inTheWoods.h"

int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "player.h"
#include <iostream>

player::player()              // defualt constructor
    :m_x(0) {}

player::player(const int& x)
    :m_x(x) {}                // parameterised

void player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> m_x;
}

const int& player::getX()const
{
    return m_x;
}
#include "inTheWoods.h"
#include "player.h"
#include <iostream>
inTheWoods::inTheWoods() {}

inTheWoods::~inTheWoods() {}

void inTheWoods::printInfo()
{
    //Player object to access methods in player class
    player playerObj;      // will beinitialized with 0
    player playerObj2(10); // will beinitialized with 10
    std::cout << playerObj.getX() <<std::endl;
    std::cout << playerObj2.getX() <<std::endl;
}
player.cpp

#include <iostream>
#include "inTheWoods.h"


int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "Player.h"

void Player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> x;
}

int Player::getX()
{
    return x;
}
#include "inTheWoods.h"

void inTheWoods::printInfo()
{
    Player playerObj; //Player object to access methods in player class
    std::cout << playerObj.getX();
}
#include <iostream>
#include "inTheWoods.h"

int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "player.h"
#include <iostream>

player::player()              // defualt constructor
    :m_x(0) {}

player::player(const int& x)
    :m_x(x) {}                // parameterised

void player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> m_x;
}

const int& player::getX()const
{
    return m_x;
}
#include "inTheWoods.h"
#include "player.h"
#include <iostream>
inTheWoods::inTheWoods() {}

inTheWoods::~inTheWoods() {}

void inTheWoods::printInfo()
{
    //Player object to access methods in player class
    player playerObj;      // will beinitialized with 0
    player playerObj2(10); // will beinitialized with 10
    std::cout << playerObj.getX() <<std::endl;
    std::cout << playerObj2.getX() <<std::endl;
}
inTheWoods.cpp

#include <iostream>
#include "inTheWoods.h"


int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "Player.h"

void Player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> x;
}

int Player::getX()
{
    return x;
}
#include "inTheWoods.h"

void inTheWoods::printInfo()
{
    Player playerObj; //Player object to access methods in player class
    std::cout << playerObj.getX();
}
#include <iostream>
#include "inTheWoods.h"

int main()
{
    inTheWoods woodsObj;
    woodsObj.printInfo();
    return 0;
}
#include "player.h"
#include <iostream>

player::player()              // defualt constructor
    :m_x(0) {}

player::player(const int& x)
    :m_x(x) {}                // parameterised

void player::setX()
{
    std::cout << "Set X to a number:" << std::endl;
    std::cin >> m_x;
}

const int& player::getX()const
{
    return m_x;
}
#include "inTheWoods.h"
#include "player.h"
#include <iostream>
inTheWoods::inTheWoods() {}

inTheWoods::~inTheWoods() {}

void inTheWoods::printInfo()
{
    //Player object to access methods in player class
    player playerObj;      // will beinitialized with 0
    player playerObj2(10); // will beinitialized with 10
    std::cout << playerObj.getX() <<std::endl;
    std::cout << playerObj2.getX() <<std::endl;
}


player
没有构造函数,因此
playerObj
的成员会得到不可预测的值。
player-playerObj;//player对象来访问player类中的方法
您创建了一个player类型的新局部变量。然后不要对它做任何操作。我希望它会打印10。@PeteBecker在这种情况下如何使用构造函数。他们有点困惑me@drescherjm这是我创建的对象,因此我可以访问该类中的方法。除非这是一种错误的方法,否则如果您想对player对象执行一些有用的操作,则不应在inTheWoods::printInfo()中创建局部变量.
player
没有构造函数,因此
playerObj
的成员会得到不可预测的值。
player-playerObj;//player对象来访问player类中的方法
您创建了一个player类型的新局部变量。然后不要对它做任何操作。我希望它会打印10。@PeteBecker在这种情况下如何使用构造函数.他们有点困惑me@drescherjm这是我创建的对象,因此我可以访问该类中的方法。除非这是一种错误的方法,否则如果您想对player对象执行一些有用的操作,则不应在inTheWoods::printInfo()中创建局部变量。我已将woods类和player类彼此分离,但仍会遇到相同的错误,即当尝试在其他类方法中打印时,我的私有变量没有值。某些编译器不允许在类级别声明
x
。请尝试将
x=10
初始化移到常量在这种情况下,我试图从用户输入中设置x,因此将其放入构造函数将不起作用。在这种情况下,将setX()移动到public并使用
playerbj.setX()调用它
。如果这不起作用,请更清楚地分享您看到的内容。这是我遇到的问题的一个粘贴箱。希望这能让事情更清楚。我已将woods类和player类彼此分离,但仍然会遇到相同的错误,即在尝试打印另一个cl时,我的私有变量没有值ass方法在类级别声明
x
时,某些编译器不允许初始化。在这种情况下,请尝试将
x=10
初始化移动到构造函数。我正在尝试从用户输入设置x,因此将其放入构造函数将不起作用。在这种情况下,请移动setX()使用
playerbj.setX();
公开并调用它。如果这不起作用,请更清楚地分享您看到的内容。这是我遇到的问题的粘贴箱。希望这能让事情更清楚。