【问题标题】:Visual Studio 2015 "non-standard syntax; use '&' to create pointer for member"Visual Studio 2015“非标准语法;使用 '&' 为成员创建指针”
【发布时间】:2015-11-17 01:58:05
【问题描述】:

我正在创建一个快速游戏,并使用不同的类文件来输入玩家姓名。我不断收到指定的错误:

使用 '&' 为成员创建指针

当我试图从 main 调用函数时。

函数getPlayerOnegetPlayerTwo 是公共函数。我认为这是因为我正在更改 player1 值,所以我需要一个指针,但是当我尝试添加一个指针时,它给了我同样的错误。

如何使用指针编辑字符串的值?

主要:

#include <iostream>
#include <string>

//Included Header Files
#include "Player.h"

using namespace std;

int main() {

    Player players;
    cout << players.getPlayerOne << endl;
    cout << players.getPlayerTwo << endl;

}

播放器.h:

#pragma once
#include <iostream>
#include <string>

using namespace std;

class Player
{
public:

    //Initialize player1
    void getPlayerOne(string &playerOne);
    void getPlayerTwo(string &playerTwo);


    Player();
private:

    //Players
    string player1;
    string player2;
};

播放器.cpp

#include "Player.h"

Player::Player()
{
}

void Player::getPlayerOne(string &playerOne) {
    cout << "Enter player 1 name: \n";
    cin >> playerOne;
    cout << playerOne << " is a great name!\n";
    player1 = playerOne;
}

void Player::getPlayerTwo(string &playerTwo) {
    cout << "Enter player 2 name: \n";
    cin >> playerTwo;
    cout << playerTwo << " is a great name!\n";

    player2 = playerTwo;
}

我可能只是将 Player 代码放在 main 中,因为它太小了,但我认为当(最终)我可以编写具有更多字符的文件时,最好有单独的类。

【问题讨论】:

  • cout &lt;&lt; players.getPlayerOne &lt;&lt; endl; 想做什么?这没有任何意义。
  • 我想你很困惑。为什么要声明该函数采用一个字符串参数?另外,你为什么不带括号调用函数?这就是令人困惑的地方——您声明该函数采用一个参数,但您尝试(即使它失败)在没有参数的情况下调用它。
  • 您必须使用( ) 来调用函数。否则编译器会认为你试图引用该函数而不调用它。另外,getPlayerOne 不返回值,所以cout &lt;&lt; players.getPlayerOne() 是非法的。
  • 没关系,修好了。我需要拿出 cout 并把它们放在 player.getPlayerOne();如果有任何意义,则使用字符串作为参数。感谢您提供帮助 :) 在提交问题之前,我必须先检查一下。

标签: c++ pointers


【解决方案1】:

您有 2 个名为 getPlayerX(string &amp; name) 的函数不返回任何内容: 我认为您在“getter”和“setter”方面犯了一个错误。

你想让你的std::coutGET一个字符串,然后让你的函数getPlayerX()像一个GETTER

std::string getPlayerX() const noexcept;

你想SET你的数据,做一个SETTER

void setPlayerX(const std::string & name);

记住,你使用的函数是这样的:

Type_you_want_to_get   Name_of_the_function ([const] type_of_argument [&] var_name)

void“意味着”什么都不返回。

【讨论】:

    【解决方案2】:

    我不得不用参数调用函数,因为它们已经有 cout 和 cin 语句。愚蠢的错误。

    string player1;
    string player2;
    
    int main() {
    
        Player players;
        players.getPlayerOne(player1);
        players.getPlayerTwo(player2);
    
    }
    

    【讨论】:

    • 在这种情况下,为什么还要上课呢?
    • 后来,当我有两个以上的玩家时,它会更有用,所以我决定为什么不练习使用类,这样我就养成了这种习惯并学习如何更好地使用类。
    • 本课程不会帮助您拥有两个以上的玩家。如果你有一个 one 播放器的 Player 类,你可以做类似Player p1, p2, p3; p1.getPlayerName(); p2.getPlayerName(); p3.getPlayerName(); 的事情。
    • 哇,我没有意识到这一点。晚上最好戒掉。
    猜你喜欢
    • 2015-11-10
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 2020-03-30
    相关资源
    最近更新 更多