显然这个prgoram不起作用。软件告诉我'=='运算符丢失了。有人可以告诉我该怎么做并解释为什么他/她的解决方案有效吗?
'\n'
虽然我们正在努力。为什么可以在if statemant中执行'cin'?我会在if statemant之前使用'cin'。
答案 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";
}