找不到“==”运算符

时间:2015-05-05 15:14:37

标签: c++ if-statement operator-keyword

显然这个prgoram不起作用。软件告诉我'=='运算符丢失了。有人可以告诉我该怎么做并解释为什么他/她的解决方案有效吗?

'\n'

虽然我们正在努力。为什么可以在if statemant中执行'cin'?我会在if statemant之前使用'cin'。

3 个答案:

答案 0 :(得分:5)

在现代C ++中,可以使用//service.yml financiera.admin.clientes: class: BitsMkt\FinancieraBundle\Admin\ClientesAdmin arguments: [ ~,BitsMkt\FinancieraBundle\Entity\Clientes,FinancieraBundle:ClientesCRUD] tags: - {name: sonata.admin, manager_type: orm, group: Sistema, label: Clientes} //ClientesCRUDController.php namespace Bitsmkt\FinancieraBundle\Controller; use Sonata\AdminBundle\Controller\CRUDController; class ClientesCRUDController extends CRUDController { public function transaccionesAction($id = null) { //throw new \RuntimeException('The Request object has not been set ' . $id); if (false === $this->admin->isGranted('LIST')) { throw new AccessDeniedException(); } $id = $this->get('request')->get($this->admin->getIdParameter()); if ($id == '*') { # TODOS - Viene de Dashboard }else { $object = $this->admin->getObject($id); if (!$object) { throw new NotFoundHttpException(sprintf('unable to find the object with id : %s', $id)); } $this->admin->setSubject($object); } $datagrid = $this->admin->getDatagrid(); $formView = $datagrid->getForm()->createView(); // set the theme for the current Admin Form $this->get('twig')->getExtension('form')->renderer->setTheme($formView, $this->admin->getFilterTheme()); return $this->render('FinancieraBundle:Frontend:prestamos_clientes.html.twig', array( 'action' => 'list', 'form' => $formView, 'datagrid' => $datagrid, 'csrf_token' => $this->getCsrfToken('sonata.batch'), )); } } 来测试流的状态。这意味着它可以直接用作explicit operator bool语句中的条件,但不能隐式转换为if以与bool进行比较。所以你需要更加惯用的

false

测试状态。

  

为什么可以在if statemant中执行'cin'?

因为条件可以是任何表达式,只要它具有可以转换为if (cin >> var) 的结果。 bool运算符返回对流的引用,可以通过上述运算符转换。

答案 1 :(得分:1)

首先cin不是你执行的东西,比如某些其他语言的print命令。它是 istream 类的对象,表示字符的标准输入流。

运算符>>从这些流中提取格式化输入。它的原型类似于

istream& operator>> (int& val);

意味着它返回对istream本身的引用,因此您可以链接

之类的操作
cin >> foo >> bar;

因此您无法将cin >> foo的结果与常量false进行比较。

另一方面,操作员“!”重载并且意味着与fail相同,因此您可以检查操作是否成功

if ( ! (cin >> var) ) {
   cerr << "something is going wrong" << endl;
}

答案 2 :(得分:0)

std::istream将转化运算符设为bool,但必须明确(http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool):

explicit operator bool() const;

您可以使用显式转化运算符:

if ( (bool)(cin >> var) == false) {
    cerr << "Falsche Eingabe - Keine Zahl\n";
}

或只是使用:

if ( !(cin >> var) ) {
    cerr << "Falsche Eingabe - Keine Zahl\n";
}