运算符>>在Visual C ++ 2010中工作,但在Linux上不是G ++
我有以下问题:
我的代码在visual c ++ 2010下可以正常工作,但是当我在Linux上编译它时,它会被编译,但是那里不起作用:
这是我的Vector
输入operator>>
:
istream& operator>>(istream& in,Vector& x)
{
char a;
in.sync();
a=in.get(); //gets the '['
for(int i=0;i<x._n;i++)
{
in>>x._vector[i];
if ((i+1)!=x._n)
a=in.get(); //gets the ','
}
in>>a; //gets the ']'
return in;
}
_vector
阵列上分Complex
数量, operator>>
中的Complex
工作正常。
输入应该看起来像这样:
[2+3i,9i,1]
当我在visual c ++ 2010上运行这个代码时,它可以工作,看起来像这样:
cin>>v; // [1+1i,2]
cin>>u; // [10,5i]
cout<<v<<endl; //prints: [1+i,2]
cout<<u<<endl; //prints: [10,5i]
当我在Linux上运行相同的代码时,在第一个数组[1+1i,2]
程序结束:
[1+1i,2] //this is the input
[6.105e-317+6.105e-317i,6.105e-317+6.105e-317i]
[6.105e-317+6.105e-317i,6.105e-317+6.105e-317i]
现在我甚至不能写另一个Vector
顺便说一句:这是我的Vector.h
#ifndef _VECTOR_
#define _VECTOR_
#include <iostream>
using namespace std;
#include "Complex.h"
class Vector
{
private:
int _n;
Complex *_vector; //points on the array of the complex numbers
public:
Vector(int n); // "Vector" - constructor of Vector with n instants
Vector(const Vector& x); // "Vector" - copy constructor of Vector with n instants
~Vector(); // "~Vector" - destructor of Vector
const Vector& operator=(const Vector& x); // "operator=" - operates "=" for Vector
Complex& operator[](const int index); // "operator[]" - choose an instant by his index in the _vector
const Vector operator+(const Vector& x) const; // "operator+" - operates "+" between two vectors
const Vector operator-(const Vector& x) const; // "operator-" - operates "-" between two vectors
const Vector operator*(double scalar) const; // "operator*" - multiplate all of the instants of the vector by the scalar
friend const Vector operator*(double scalar,const Vector& x); // "operator*" - multiplate all of the instants of the vector by the scalar
const Complex operator*(const Vector& x) const; // "operator*" - operates "*" between two vectors
const Vector& operator+=(const Vector& x); // "operator+=" - operates "+=" for the instant
const Vector& operator-=(const Vector& x); // "operator-=" - operates "-=" for the instant
friend ostream& operator<<(ostream& out,const Vector& x); // "operator<<" - prints the vector
friend istream& operator>>(istream& in,Vector& x); // "operator<<" - gets the vector
const double operator!() const; // "operator!" - returns the the instant in the definite value of the vactor that his definite value is the highest (in the Vector)
};
#endif
这里是我定义Vector:Vector.cpp构造函数的地方
#include <iostream>
using namespace std;
#include <math.h>
#include "Complex.h"
#include "Vector.h"
// "Vector" - constructor of Vector with n instants
Vector::Vector(int n)
{
_vector=new Complex[n]; //new vector (array) of complex classes
_n=n;
}
谁能帮我?
我认为问题出在您对in.sync()
调用中。
这会刷新输入缓冲区,即丢弃istream缓冲区中当前的任何数据。 究竟是什么被放入缓冲区取决于a)你的平台和b)你在调用operator>>
之前做了什么。
至于b),这就是为什么从operator>>
调用sync
是错误的,但那是“你的问题”。
至于a),您应该知道UNIX系统在操作系统级别对控制台文本输入进行行缓冲,然后istream才有发言权。 您要刷新的数据可能在操作系统缓冲区中,而不是在istream的缓冲区中。
如果你只是想跳过空格,你应该使用in >> std::ws;
上一篇: operator>> works in Visual C++ 2010 but not G++ on Linux