這是我的一段代碼,它解決了微分方程組。'無效使用void表達式'傳遞函數的參數
Vector dydx(Neq);
void DiffEq(Vector x, Vector &dydx)
{
dydx(0) = x(1);
dydx(1) = -x(0);
}
double MidPoint(int n, Vector x)
{
double h=H/n;
Matrix z(n+1,n+1);
z.fillRow(0,x);
DiffEq(x, dydx);
z.fillRow(1,AddVec(x, dydx*h)); //Error: Invalid use of void expression
for (int j=1; j<n; j++)
{
DiffEq(z.getRow(j), dydx);
z.fillRow(j+1, AddVec(z.getRow(j-1), dydx*h*2)); //error: void value not ignored as it ought to be
}
DiffEq(z.getRow(n), dydx);
return 0.5*AddVec(z.getRow(n), z.getRow(n-1), dydx*h); //Error: Invalid use of void expression
}
類Vector和Matrix是自定義的。這是矢量
class Vector
{
public:
Vector(size_t size): vSize(size), vData(size){}
int getSize(){return vSize;}
double& operator()(size_t i){return vData[i];}
double operator()(size_t i) const {return vData[i];}
void operator+(double d) // These only overload the Vector + int operator
{
for (int i=0; i<vSize; i++) {vData[i]=vData[i]+d;}
}
void operator*(double d)
{
for (int i=0; i<vSize; i++) {vData[i]=vData[i]*d;}
}
size_t vSize;
vector<double> vData;
};
與函數
Vector AddVec(Vector v1, Vector v2)
{
Vector totVec(v1.getSize());
for (int i=0; i<v1.getSize(); i++) {totVec(i) = v1(i) + v2(i);}
return totVec;
}
而對於3個載體相同的功能。
現在我意識到錯誤意味着我將void傳遞給某個函數,但我無法弄清楚事情出錯的地方。當我嘗試編寫測試程序時,一切似乎都正常。
對不起,dydx是一個全球性的載體。我會編輯它。還有一些常數我會忽略,以便使問題縮短一些。 – RobVerheyen
我不這麼認爲。 Vector的聲明位於包含的頭文件中。我應該可能顯示我的完整代碼: http://pastebin.com/sanKD2XJ < - 主程序 http://pastebin.com/qdZeVRQg < - containers.h – RobVerheyen
問題是你的'operator +'和'operator *'return' void' –