2013-04-02 92 views
0

我想在C++(VS2010)中創建一個私有函數。 它應該返回結構體/用戶定義類型的向量/數組。帶結構向量作爲返回值的C++函數

但是我認爲我在cpp文件中的函數聲明可能是錯誤的。 或者可能已經在標題中。有人可以看看嗎?

我的頭看起來是這樣的:

#pragma once 
using namespace std; 
#include <algorithm> 
#include <vector> 
class clsWString2 
{ 
private: 
struct udtWChar2 
{ 
    wstring Text; 
    int OrigPos; 
}; 
bool m_bDirty; 
vector<udtWChar2>pToWChar2(wstring u); 

vector<udtWChar2>m; 
public: 
clsWString2(void); 
~clsWString2(void); 
void ReplaceCompareBinary(wstring uSearchFor, wstring uReplaceBy); 
void ReplaceCompareText(wstring uSearchFor,wstring uReplaceBy); 
void ReplaceByPos(int uStartPos1Based,int uLen0Based, wstring uReplaceBy); 
void FeedString(wstring u); 
void Append(wstring u); 
wstring CharAtPos(int uIndex); 
int OrigPos(int uIndex); 
}; 

我的.cpp文件看起來是這樣的:

#include "StdAfx.h" 
#include "clsWString2.h" 


clsWString2::clsWString2(void) 
{ 
m.resize(0); 
} 
clsWString2::~clsWString2(void) 
{ 
} 
vector<udtWChar2> clsWString2::pToWChar2(wstring u) 
{ 
vector<udtWChar2> n; 
n.resize(0); 

for (int i=0;i<u.size();i++) 
{ 

    wstring sChar; 
    sChar=u.substr(i,1); 

    udtWChar2 nc; 
    nc.Text =sChar; 
    nc.OrigPos=i; 

    n.push_back (nc); 
} 

return n; 
} 
+1

該代碼看起來很好。你有什麼問題? –

+0

vector clsWString2 :: pToWChar2(wstring u)編譯器說「udtWChar2」未定義。 – tmighty

+0

可以向量 clsWString2 :: pToWChar2(wstring u)工作嗎? – Kupto

回答

5

在源文件,當您定義該函數時,返回類型不在該類的範圍內,因此向量中的類需要完全限定:

vector<clsWString2::udtWChar2> clsWString2::pToWChar2(wstring u) 
{ 
    ... 
} 
1

嗯,我知道了:

vector<clsWString2::udtWChar2> clsWString2::pToWChar2(wstring u) 
+0

但我不明白爲什麼我需要說clsWString2 ::我不能這樣做,所以這是很明顯的類udtWChar2是衆所周知的嗎? – tmighty

0

不能直接使用udtWChar2類型,你需要定義類型定義,或者你需要使用的結構udtWChar2

像:

在.H

vector < struct udtWChar2 > pToWChar2(wstring u); 
vector < struct udtWChar2 > m; 

。 cpp

vector < struct clsWString2::udtWChar2 > clsWString2::pToWChar2(wstring u)