vector不能引用?定义了一个vector, 函数引用这个类型的时候出错,

nobelb 2009-06-18 05:19:03
typedef vector<CStringArray> CStringArrayTwo;

void Cselpeopledlg::LoadFile(CString nFileName,CStringArrayTwo& arrtStr)//读取文件获取最近
{
//获取文件名
CString des=_T("");
TCHAR exeFullPath[MAX_PATH]; // MAX_PATH
GetModuleFileName(NULL,exeFullPath,MAX_PATH);
des=(LPCSTR)exeFullPath;
int n = des.ReverseFind('\\');
des = des.Left(n);
CString nFileFullName = des+_T("\\")+nFileName;
m_LoadFileName = nFileFullName;

//读文件
CString nLines = ReadFileByLine(RECENTLINES,m_LoadFileName);
m_szReadFileLineTexts = nLines;//保存读出各行的字符串到内部变量

//分割每行到数组
CStringArray arrStr;
CStringArray arrSubStr;
char str1 = _T('\n');
char str2 = _T('|');
n_slipt(m_szReadFileLineTexts,str1,arrStr);
for(int i=0;i<arrStr.GetCount();i++)
{
n_slipt(arrStr[i],str2,arrSubStr);
arrtStr.push_back(arrSubStr);
}

m_boIsLoadFile = TRUE;
}


1>C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\afxcoll.h(590) : error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'
...全文
557 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sing_He 2010-03-13
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 conry 的回复:]

用指针也不会有问题
[/Quote]

这个不错
Conry 2009-06-18
  • 打赏
  • 举报
回复
用指针也不会有问题
nobelb 2009-06-18
  • 打赏
  • 举报
回复
谢谢各位,我用
typedef vector <CString> MyCStringArray;
typedef vector <MyCStringArray> CStringArrayTwo;
编译没错,希望不会出其他问题,结贴
程序员刘帅 2009-06-18
  • 打赏
  • 举报
回复
因为基类CObject禁止对象拷贝,导致所有CObject派生累禁止拷贝

// Disable the copy constructor and assignment by default so you will get
// compiler errors instead of unexpected behaviour if you pass objects
// by value or assign objects.
protected:
CObject();
private:
CObject(const CObject& objectSrc); // no implementation
void operator=(const CObject& objectSrc); // no implementation

nobelb 2009-06-18
  • 打赏
  • 举报
回复
@_@!

原来spring203大哥没看到之前的回复。。。
spring203 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 akirya 的回复:]
CStringArray对象不能拷贝.
而vector里面放的元素需要能够拷贝,所以编译错误.
[/Quote]
是这个啦
nobelb 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 spring203 的回复:]
郁闷了,下班了, 帮忙把CStringArray的定义贴出来吧,我再看看,晕死
[/Quote]
class CStringArray : public CObject
{

DECLARE_SERIAL(CStringArray)
public:

// Construction
CStringArray();

// Attributes
INT_PTR GetSize() const;
INT_PTR GetCount() const;
BOOL IsEmpty() const;
INT_PTR GetUpperBound() const;
void SetSize(INT_PTR nNewSize, INT_PTR nGrowBy = -1);

// Operations
// Clean up
void FreeExtra();
void RemoveAll();

// Accessing elements
const CString& GetAt(INT_PTR nIndex) const;
void SetAt(INT_PTR nIndex, LPCTSTR newElement);

void SetAt(INT_PTR nIndex, const CString& newElement);

CString& ElementAt(INT_PTR nIndex);

// Direct Access to the element data (may return NULL)
const CString* GetData() const;
CString* GetData();

// Potentially growing the array
void SetAtGrow(INT_PTR nIndex, LPCTSTR newElement);

void SetAtGrow(INT_PTR nIndex, const CString& newElement);

INT_PTR Add(LPCTSTR newElement);

INT_PTR Add(const CString& newElement);

INT_PTR Append(const CStringArray& src);
void Copy(const CStringArray& src);

// overloaded operator helpers
const CString& operator[](INT_PTR nIndex) const;
CString& operator[](INT_PTR nIndex);

// Operations that move elements around
void InsertAt(INT_PTR nIndex, LPCTSTR newElement, INT_PTR nCount = 1);

void InsertAt(INT_PTR nIndex, const CString& newElement, INT_PTR nCount = 1);

void RemoveAt(INT_PTR nIndex, INT_PTR nCount = 1);
void InsertAt(INT_PTR nStartIndex, const CStringArray* pNewArray);

// Implementation
protected:
CString* m_pData; // the actual array of data
INT_PTR m_nSize; // # of elements (upperBound - 1)
INT_PTR m_nMaxSize; // max allocated
INT_PTR m_nGrowBy; // grow amount

void InsertEmpty(INT_PTR nIndex, INT_PTR nCount);


public:
~CStringArray();

void Serialize(CArchive&);
#ifdef _DEBUG
void Dump(CDumpContext&) const;
void AssertValid() const;
#endif

protected:
// local typedefs for class templates
typedef CString BASE_TYPE;
typedef LPCTSTR BASE_ARG_TYPE;
};
spring203 2009-06-18
  • 打赏
  • 举报
回复
郁闷了,下班了, 帮忙把CStringArray的定义贴出来吧,我再看看,晕死
nobelb 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 spring203 的回复:]
引用 5 楼 nobelb 的回复:
typedef vector <CStringArray&> CStringArrayTwo;好象不行

报原来一样的错误?
[/Quote]
不一样,报的更多
C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xmemory(95) : error C2528: 'pointer' : pointer to reference is illegal
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(429) : see reference to class template instantiation 'std::allocator<_Ty>' being compiled
1> with
1> [
1> _Ty=CStringArray &
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(439) : see reference to class template instantiation 'std::_Vector_val<_Ty,_Alloc>' being compiled
1> with
1> [
1> _Ty=CStringArray &,
1> _Alloc=std::allocator<CStringArray &>
1> ]
1> .\selpeopledlg.cpp(328) : see reference to class template instantiation 'std::vector<_Ty>' being compiled
1> with
1> [
1> _Ty=CStringArray &
1> ]
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xmemory(96) : error C2529: 'reference' : reference to reference is illegal
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xmemory(97) : warning C4181: qualifier applied to reference type; ignored
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xmemory(97) : error C2528: 'const_pointer' : pointer to reference is illegal
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xmemory(98) : warning C4181: qualifier applied to reference type; ignored
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xmemory(98) : error C2529: 'const_reference' : reference to reference is illegal
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xmemory(115) : error C2535: 'CStringArray &(*std::allocator<_Ty>::address(CStringArray &(&)) const)' : member function already defined or declared
1> with
1> [
1> _Ty=CStringArray &
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xmemory(109) : see declaration of 'std::allocator<_Ty>::address'
1> with
1> [
1> _Ty=CStringArray &
1> ]
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xmemory(153) : warning C4181: qualifier applied to reference type; ignored
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xmemory(153) : error C2529: '_Val' : reference to reference is illegal
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(486) : warning C4181: qualifier applied to reference type; ignored
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(486) : warning C4181: qualifier applied to reference type; ignored
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(486) : error C2529: '_Val' : reference to reference is illegal
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(492) : warning C4181: qualifier applied to reference type; ignored
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(492) : warning C4181: qualifier applied to reference type; ignored
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(492) : error C2529: '_Val' : reference to reference is illegal
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(544) : warning C4181: qualifier applied to reference type; ignored
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(544) : error C2529: '_Val' : reference to reference is illegal
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(808) : warning C4181: qualifier applied to reference type; ignored
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(808) : error C2529: '_Val' : reference to reference is illegal
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(869) : warning C4181: qualifier applied to reference type; ignored
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(869) : error C2529: '_Val' : reference to reference is illegal
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(874) : warning C4181: qualifier applied to reference type; ignored
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(874) : error C2529: '_Val' : reference to reference is illegal
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(881) : warning C4181: qualifier applied to reference type; ignored
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(881) : error C2529: '_Val' : reference to reference is illegal
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(1099) : warning C4181: qualifier applied to reference type; ignored
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(1099) : error C2529: '_Val' : reference to reference is illegal
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(1157) : warning C4181: qualifier applied to reference type; ignored
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(1157) : error C2529: '_Val' : reference to reference is illegal
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(1257) : warning C4181: qualifier applied to reference type; ignored
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(1257) : error C2529: '_Val' : reference to reference is illegal
1>.\selpeopledlg.cpp(328) : error C2662: 'std::vector<_Ty>::push_back' : cannot convert 'this' pointer from 'const CStringArrayTwo' to 'std::vector<_Ty> &'
1> with
1> [
1> _Ty=CStringArray &
1> ]
1> Conversion loses qualifiers
qiangorqiang 2009-06-18
  • 打赏
  • 举报
回复
typedef vector <CStringArray> CStringArrayTwo
spring203 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nobelb 的回复:]
typedef vector <CStringArray&> CStringArrayTwo;好象不行
[/Quote]
报原来一样的错误?
nobelb 2009-06-18
  • 打赏
  • 举报
回复
typedef vector <CStringArray&> CStringArrayTwo;好象不行
spring203 2009-06-18
  • 打赏
  • 举报
回复
typedef vector<CStringArray&> CStringArrayTwo; 看看, 至于加不加const 看你的使用了。
nobelb 2009-06-18
  • 打赏
  • 举报
回复
另外
typedef vector<CString> MyCStringArray;
typedef vector<MyCStringArray> CStringArrayTwo;
改成这样可以吗
nobelb 2009-06-18
  • 打赏
  • 举报
回复
谢谢楼上,弱弱的问一下CStringArray为什么不能拷贝的?
  • 打赏
  • 举报
回复
CStringArray对象不能拷贝.
而vector里面放的元素需要能够拷贝,所以编译错误.

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧