2015-11-25 124 views
1

我正在嘗試編寫一個帶有向量返回類型的程序。它不斷崩潰。我認爲問題在於,在矢量創建過程中,編譯器沒有初始化新矢量的內存。但我不太確定問題是什麼。如果有人能幫忙,非常感謝。 TY。從@Nandu和返回類型向量

//Settings-->compiler-->(Have g++ follow the c++11 ISO c++ language standard [-std=c++11] 

#include <iostream> 
#include <vector> 
#include <array> 
#include <iomanip> 

using namespace std; 

void displayVector(vector<double> &); 
vector<double> calcVolts(vector<double> &U, vector<double> &V); 


int main() 
{ 
vector<double> current {10.62, 14.89, 13.21, 16.55, 18.62, 9.47, 6.58, 18.32, 12.15, 3.98}; 
vector<double> resistance { 4.0, 8.5, 6.0, 7.35, 9.0, 15.3, 3.0, 5.4, 2.9, 4.8}; 
//displayVector(current); 
//displayVector(resistance); 
calcVolts (current, resistance); 

} 

void displayVector(vector<double> &object) 
{ 
    for (int R = 0; R <object.size(); ++R) 
    { 
     cout<< setw(5)<< R+1<< "\t"<< object[R]<<endl; 
    } 
} 

vector<double> calcVolts(vector<double> &U, vector<double> &V) 
{ 
    std::vector <double> Voltage; 
    if ((U.size() == V.size()) == false) 
    { 
     cout<<"Invalid Matrix Multiplication: Size do not match.\n\n"; 
    } 
    else 
    { 
     for (int R = 0; R <U.size(); ++R) 
     { 
     Voltage[R] = U[R]*V[R]; 
     } 
     return Voltage; 
    } 
} 

見註釋@soulsabr

答:

從@Soulsabr:前intitialization也應申報其大小 載體。

From @Nandu: 局部變量沒有返回類型。

從@Soulsabr: {你當然可以返回它。在一個std :: vector的情況下,將會創建一個副本,以便本地元素可以在超出範圍時被銷燬。你絕對不能做的是一個指針返回給本地對象。}

回答

1
for (int R = 0; R <U.size(); ++R) 
{ 
    Voltage[R] = U[R]*V[R]; 
} 

這是你的第一個問題。電壓是一個空的矢量,你試圖把東西放在什麼都不存在的地方。嘗試創建你的載體像

vector<double> voltage(U.size()); 

這應該有所幫助。另外,我很驚訝你不會因爲可能不會返回任何東西而出現錯誤。

+0

非常感謝。 intitialization之前的矢量也應該聲明其大小。 –

+0

將此標記爲正確的答案將是一件好事。 – soulsabr

+1

theres 2有用的建議,創造正確的答案@soulsabr –

0

你不能在矢量返回局部變量的返回類型

vector<double> calcVolts(vector<double> &U, vector<double> &V) 
{ 
    std::vector <double> **Voltage**; 
    if ((U.size() == V.size()) == false) 
    { 
     cout<<"Invalid Matrix Multiplication: Size do not match.\n\n"; 
    } 
    else 
    { 
     for (int R = 0; R <U.size(); ++R) 
     { 
     Voltage[R] = U[R]*V[R]; 
     } 
     return **Voltage**; 
    } 
} 

通行證返回結果。

vector<double> UV; 
calcVolts (current, resistance,UV); 

calcVolts(vector<double> &U, vector<double> &V, vector<double>& UV) 
{ 
    if ((U.size() == V.size()) == false) 
    { 
     cout<<"Invalid Matrix Multiplication: Size do not match.\n\n"; 
    } 
    else 
    { 
     for (int R = 0; R <U.size(); ++R) 
     { 
     UV[R] = U[R]*V[R]; 
     } 
    } 
} 
+0

非常感謝。局部變量不具有返回類型。 –

+1

你當然可以返回它。在一個std :: vector的情況下,將會創建一個副本,以便本地元素可以在超出範圍時被銷燬。你絕對不能做的是返回一個指向本地對象的指針。 – soulsabr