对象c++之前应为主表达式

expected primary expression before object c++

本文关键字:表达式 c++ 对象      更新时间:2023-10-16

这是我的代码

#include "Square.h"
#include "tools.hpp"
ostream&
Square :: print(ostream& s)
{
  return s << "Square [" << row << " " << column << "]" << endl;
}
ostream&
SqState :: print(ostream& sq)
{
    return sq << "value: " << sq_value;
}
void testSquare();
void testSqState();
int main()
{
    banner();
    testSquare();
    testSqState();
    bye();
}
void testSqState()
{
   SqState sq('-', 4, 0);
   sq.print(ostream s); // << Error occurs here
}
void testSquare()
{
    Square s(4, 0);
    s.print(ostream st);  // << Error occurs here
}

***之间的语句,出现错误。表示预期的主表达式s和预期的主要表达st

和广场.h有阶级广场和SqState。

请帮我,的实际问题在哪里

考虑此代码:

SqState sq('-', 4, 0);
sq.print(ostream s);

您可以注意到SqState有一个名为print()的方法,它在这里定义:

ostream&
SqState :: print(ostream& sq)
{
    return sq << "value: " << sq_value;
}

因此,这个print()方法的参数是对ostream(实际上是std::ostream)实例的引用&
您应该在调用站点提供该实例,并且可以选择std::cout在标准控制台输出上打印文本:

sq.print(std::cout);

类似地,对于testSquare()函数中的其他代码。

你可能想写一些类似的东西

void testSqState() {
    SqState sq('-', 4, 0);
    sq.print(std::cout);
}
void testSquare() {
    Square s(4, 0);
    s.print(std::cout);
}
**sq.print(ostream s);**
**s.print(ostream st);**

你不需要把ostream放在那里,假设s和st已经定义好了。