天下第一怪的字符串问题,谁见过字符串刚刚定义,却不能赋值的问题 在程序中作如下操作:CString ss="dd";调试时,刚运行完本句,用QuickWatch察看ss的值,等到结果: CXX0017: Error: symbol "ss" not found什么原因,太奇怪了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不要用QUICKWATCH看,QUICKWATCH有变量范围问题 我也曾遇到这种奇怪问题,记不清楚当时的运行环境了。这是这样解决的CString ss;ss = "dd";再编译就没问题了。我也没深究。楼主的精祌我要好好学习。 有这样定义的么 CString是个类 CString是一个类,其内部运作原理其实是用字符数组存储的,它帮你管理了这些内存。一般以一个算法来计算需要一般情况下所需字符串的长度(字符串类有很多,具体到CString的话我没有深究,但原理是一样的),然后new(Alloc)出来,当类析构时 Delete(Free)。也就是说同样存在new不成功的情况,在程序中用CString ss = "dd";是可以的,相当于调用CString::CString(LPCTSTR lpsz),楼主存在的问题可能在一个可能出现分配内存错误的环境中运行,所以楼主要解决的并不是字符串的符值问题,而是代码其它地方的错误,要不然就是系统本身有问题。 老兄,你们说的都很对,我本来的问题是这样的。定义一个类:class CFormHeadStru {public: CPtrArray m_subItem; CString m_sItemName; CString m_cItemCode; int m_nRowSpan; int m_nColSpan; CFormHeadStru(CString sName,CString sCode,int nColSpan,int nRowSpan) { m_sItemName = sName; m_cItemCode = sCode; m_nColSpan = nColSpan; m_nRowSpan = nRowSpan; }; virtual ~CFormHeadStru();};然后再程序其它地方定义其实力:CFormHeadStru _headStru(_T("年"),"Date",2,1);程序执行时发现构造含数中CFormHeadStru成员的所有CString类型成员的值都没有正确赋值,然后又通过上面在其他地方定义字符串试验,结构发现字符串都不能正确使用,大家不要跑题 重新build全部工程试试(Rebuild All) 我用单步调试了一下,发现赋值没有错误如下: CFormHeadStru _headStru(_T("年"),"Date",2,1); CString str1=_headStru.m_sItemName; CString str2=_headStru.m_cItemCode; int in1=_headStru.m_nRowSpan; int in2=_headStru.m_nColSpan;单步调试显示栏中 str1,str2,值均是正确的字符串本身并没有错误 楼主,你的代码中CFormHeadStru(CString sName,CString sCode,int nColSpan,int nRowSpan) { m_sItemName = sName; m_cItemCode = sCode; m_nColSpan = nColSpan; m_nRowSpan = nRowSpan; };会被编译器声明成Online,你试一下把它改成CFormHeadStru(CString sName,CString sCode,int nColSpan,int nRowSpan);CPP文件中CFormHeadStru::CFormHeadStru(CString sName,CString sCode,int nColSpan,int nRowSpan) { m_sItemName = sName; m_cItemCode = sCode; m_nColSpan = nColSpan; m_nRowSpan = nRowSpan; };我想问题应该就解决 GDI+中,Pen::SetAlignment(PenAlignmentInset);对线条质量的影响 为什么出错? 高手来帮忙看看怎么解决 vs6转vs2008 如何改变CPropertyPage页的标题? 数据库系统设计错误,但错误已经造成,SQL语句还是要写,下面的语句怎么写? 有关OnEraseBKgnd()函数的问题 程序设计 event handler wizard无法使用 求救,关于多线程处理串口处理数据问题 DYNAMIC_DOWNCAST 有什么用途? 谁知道有《VC++ 技术内幕》第四版
这是这样解决的
CString ss;
ss = "dd";
再编译就没问题了。我也没深究。楼主的精祌我要好好学习。
class CFormHeadStru
{
public:
CPtrArray m_subItem;
CString m_sItemName;
CString m_cItemCode;
int m_nRowSpan;
int m_nColSpan; CFormHeadStru(CString sName,CString sCode,int nColSpan,int nRowSpan)
{
m_sItemName = sName;
m_cItemCode = sCode;
m_nColSpan = nColSpan;
m_nRowSpan = nRowSpan;
};
virtual ~CFormHeadStru();
};
然后再程序其它地方定义其实力:
CFormHeadStru _headStru(_T("年"),"Date",2,1);
程序执行时发现构造含数中CFormHeadStru成员的所有CString类型成员的值都没有正确赋值,
然后又通过上面在其他地方定义字符串试验,结构发现字符串都不能正确使用,大家不要跑题
如下:
CFormHeadStru _headStru(_T("年"),"Date",2,1);
CString str1=_headStru.m_sItemName;
CString str2=_headStru.m_cItemCode;
int in1=_headStru.m_nRowSpan;
int in2=_headStru.m_nColSpan;单步调试显示栏中 str1,str2,值均是正确的
字符串本身并没有错误
CFormHeadStru(CString sName,CString sCode,int nColSpan,int nRowSpan)
{
m_sItemName = sName;
m_cItemCode = sCode;
m_nColSpan = nColSpan;
m_nRowSpan = nRowSpan;
};
会被编译器声明成Online,你试一下把它改成
CFormHeadStru(CString sName,CString sCode,int nColSpan,int nRowSpan);
CPP文件中
CFormHeadStru::CFormHeadStru(CString sName,CString sCode,int nColSpan,int nRowSpan)
{
m_sItemName = sName;
m_cItemCode = sCode;
m_nColSpan = nColSpan;
m_nRowSpan = nRowSpan;
};
我想问题应该就解决