0

私は自分の C++ クラスのコードを少し書いていますが、少し行き詰まっています。

ここに私が取り組んでいる割り当てのビットがあります:


Rover クラス内で、次のメンバー インスタンス変数を指定します。

 name (String)

 x position on a grid (integer)

 y position on a grid (integer)

 direction by compass – N, S, E, or W (String)

 speed (0 – 5 meters per second, integer)

Rover クラス内で、次のメソッドを指定します。

 No-arg constructor – set the rover’s position to (0,0), its speed to 0, 
  its direction to North,and its name to Default

 Constructor that receives parameters to initialize all five 
  instance variables described above

 Setter methods for each instance variable

 Getter methods for each instance variable

 getRoverData – returns a string that displays values for each instance 
  variable of the current rover object, placing each value on a separate line, 
  as follows:

だから今は、ベースケースを機能させたいだけです。これが私のコード全体です:


main.cpp:

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

using namespace std;


int main() {

    Rover rover1;

    rover1.setDefaultValues();

    cout<<rover1.getRoverData(rover1)<<endl;

    return 0;
}

ローバー.cpp:

#include <iostream>
#include "Rover.h"
using namespace std;

//put functions in here

void Rover::setDefaultValues() {
    name = "Default";
    xcoord = 0;
    ycoord = 0;
    direction = "N";
    speed = 0;

}

void Rover::constructRover() {

}

void Rover::setXcoord(int xcoord) {
    this->xcoord = xcoord;
}

void Rover::setYcoord(int ycoord) {
    this->ycoord = ycoord;

}

void Rover::setName(string name) {
    this->name = name;
}

void Rover::setDirection(string direction) {
    this->direction = direction;
}

void Rover::setSpeed(int speed) {
    this->speed = speed;
}

int Rover::getXcoord() {
    return xcoord;

}

int Rover::getYcoord() {
    return ycoord;
}

string Rover::getName() {
    return name;
}

string Rover::getDirection() {
    return direction;
}

int Rover::getSpeed() {
    return speed;
}

string Rover::getRoverData(Rover rover) {
    string printStatement = "";
    printStatement.append("Data for " << rover.getName());
    printStatement.append("\nX: " << Rover::xcoord);
    printStatement.append("\nY: " << Rover::ycoord);
    printStatement.append("\nDirection: " << Rover::direction);
    printStatement.append("\nSpeed: " << Rover::speed);
    return printStatement;

}

ローバー.h:

/* 
 * File:   Rover.h
 * Author: Matthew
 *
 * Created on May 14, 2012, 8:10 PM
 */


#ifndef ROVER_H
#define ROVER_H

using namespace std;


class Rover
{
        private:
            string name;
            int xcoord;
            int ycoord;
            string direction;
            int speed;


    public:
            void setDefaultValues();
            void constructRover();
            //XCoordinates
            void setXcoord(int xcoord);
            int getXcoord();
            //YCoordinates
            void setYcoord(int ycoord);
            int getYcoord();
            //Name
            void setName(string name);
            string getName();
            //Direction
            void setDirection(string direction);
            string getDirection();
            //Speed
            void setSpeed(int speed);
            int getSpeed();
            //Printout
            string getRoverData(Rover rover);

};

#endif  /* ROVER_H */

現在発生しているエラーは次のとおりです。

rover.cpp:64: error: no match for 'operator<<' in '"Data for " << Rover::getName()()'

一体それはどういう意味ですか?

この時点で、印刷物に伝えたいことは次のとおりです。

Data for Default
X: 0
Y: 0
Direction: N
Speed: 0

何かご意見は?

投稿したコードが見栄えが悪い場合は申し訳ありません...これは以前に行ったことがありません。


アップデート:


#include <iostream>
#include "Rover.h"
using namespace std;

//put functions in here

void Rover::setDefaultValues() {
    name = "Default";
    xcoord = 0;
    ycoord = 0;
    direction = "N";
    speed = 0;

}

void Rover::constructRover() {

}

void Rover::setXcoord(int xcoord) {
    this->xcoord = xcoord;
}

void Rover::setYcoord(int ycoord) {
    this->ycoord = ycoord;

}

void Rover::setName(string name) {
    this->name = name;
}

void Rover::setDirection(string direction) {
    this->direction = direction;
}

void Rover::setSpeed(int speed) {
    this->speed = speed;
}

int Rover::getXcoord() {
    return xcoord;

}

int Rover::getYcoord() {
    return ycoord;
}

string Rover::getName() {
    return name;
}

string Rover::getDirection() {
    return direction;
}

int Rover::getSpeed() {
    return speed;
}

string Rover::getRoverData(Rover rover) {
    string printStatement = "";
    printStatement.append("Data for " + rover.getName());
    printStatement.append("\nX: " + rover.getXcoord());
    printStatement.append("\nY: " + rover.getYcoord());
    printStatement.append("\nDirection: " + rover.getDirection());
    printStatement.append("\nSpeed: " + rover.getSpeed());
    return printStatement;

}

したがって、印刷物は次のようになります。

Data for Default
X:
Y:
Direction: N
Speed:

したがって、基本的にはゼロを出力しません。考え?

4

1 に答える 1

1

<<ストリーム挿入演算子です。const char[]左辺とstd::string右辺を取る関数はどこにもありません。したがって、エラーが発生しています。

を使用するときにこの組み合わせを使用できますがcout、少し欺瞞的です。次の呼び出し:

std::cout << "Some string" << someStdString;

と定義されている:

(std::cout << "Some string") <<  someStdString;

実際の呼び出しは次と同等です。

operator<< (operator<< (std::cout, "Some string"), someStdString);

それを機能させるのは、内部呼び出しが同じものを返すことcoutです。これは、他の呼び出しで使用できるように渡されました。coutこの動作を示すようなものを使用しないと、同じようには機能しません。これが、次のように言える理由でもあります。

int i = 5 + 2 + 3;

5 + 2 は を返しint、これに 3 が追加され、int割り当てられたが返されますi

append文字列と文字配列の加算は std::string の一部として定義されているため、内部の文字列を連結するには、それをプラスに置き換えるか、別の呼び出しを追加します。

printStatement.append("Data for " + rover.getName());
//or
printStatement.append("Data for ");
printStatement.append(rover.getName());
//or
printStatement += "Data for " + rover.getName();

アップデート:

他の質問に答えるために、これは Java の一部ではない C++ の別の機能です。それらのいくつかにintを追加していることに気づきませんでした。これを行うと、引用符内の文字配列は実際にはポインターに崩壊します。次に、ポインター演算を使用して整数を加算します。あなたが望んでいたものではありません。したがって、基本的には、文字列リテラルの先頭へのポインターを渡し、x 文字を前方に移動します。ここで、x は追加する数値です。0 を追加すると、そこにとどまることを意味するため、文字列全体が渡され、+ 0ほとんどデッド コードになります。

int を追加する場合は、整数を文字列に変換してから追加する方法が必要です。C++11 には がありますがstoi、それはあなたが望むものとは逆です。代わりに、他の方法の中でもとりわけ stringstream を使用できます。

#include <sstream>

int main()
{
    std::stringstream ss;
    ss << 5; //the int to be converted
    std::string s = ss.str(); //get the string
    cout << s + " is the number"; //print with an added string
}
于 2012-05-15T02:16:38.450 に答える