操作系统nucleus
处理器OMAP3530
程序编译后load symbol时候报错,程序不能下载,经排查,发现类成员里如果有某静态类成员,
或者静态结构,而该类或者结构含有构造函数,就会报这样的错误,只要去掉构造函数,程序就
可以下载。
下面是一个测试程序,去掉构造函数后就可以下载,现在这样就不行。
请牛人指点,谢谢啦。
class CTest
{
public:
CTest(){m_pTest=0;}; // After delete t he structure function ,problem will die out
int* m_pTest;
};
class CComEntity
{
private:
static CTest s_value[10];
}
CTest CComEntity::s_value[10];
6 个解决方案
#1
错误提示:
Internal error: get_attr_value() found unrecognized attribute form
Internal error: get_attr_value() found unrecognized attribute form
#2
CTest(){m_pTest=0;}; // After delete t he structure function ,problem will die out
int* m_pTest;
---》这里的m_pTest是一个指向整形数据的指针变量,你构造函数中应该让这个指针指向某个整形变量才对啊,怎么把0赋值给m_pTest,我猜测楼主的意思应该是m_pTest=NULL才对吧,楼主可以试一下,是否可以麻烦告知,先谢谢了。
int* m_pTest;
---》这里的m_pTest是一个指向整形数据的指针变量,你构造函数中应该让这个指针指向某个整形变量才对啊,怎么把0赋值给m_pTest,我猜测楼主的意思应该是m_pTest=NULL才对吧,楼主可以试一下,是否可以麻烦告知,先谢谢了。
#3
和楼上观点有点不同哈。
class CTest
{
public:
CTest(){m_pTest=0;}; // After delete t he structure function ,problem will die out
int* m_pTest;
};
“下面是一个测试程序,去掉构造函数后就可以下载,现在这样就不行。”
楼主,如果加上了这个构造函数,则类CTest不具备默认构造函数。
s_value数组,你又没显示初始化,那么编译器就迷茫了,它不知道如何去初始化这个数组。
class CTest
{
public:
CTest(){m_pTest=0;}; // After delete t he structure function ,problem will die out
int* m_pTest;
};
“下面是一个测试程序,去掉构造函数后就可以下载,现在这样就不行。”
楼主,如果加上了这个构造函数,则类CTest不具备默认构造函数。
s_value数组,你又没显示初始化,那么编译器就迷茫了,它不知道如何去初始化这个数组。
#4
而如果楼主去掉了这个构造函数
则编译器在编译时,发现该类一个构造函数都没有
则编译器会自动为类CTest生成一个默认的构造函数,则可以通得过。
因为s_value数组,编译器可以通过调用CTest类的默认构造函数去初始化
则编译器在编译时,发现该类一个构造函数都没有
则编译器会自动为类CTest生成一个默认的构造函数,则可以通得过。
因为s_value数组,编译器可以通过调用CTest类的默认构造函数去初始化
#5
楼主如果非要定义一个自己的构造函数的话,要定义一个默认的构造函数,而不是现在这样。
这个怎么定义,相信楼主去看一下基础c++,楼主应该会的。
这个怎么定义,相信楼主去看一下基础c++,楼主应该会的。
#6
回2楼:
把=0 改成=NULL是不行的。
回3,4楼:
没有参数的构造函数是匹配的。而且如果该数组如果不是static的就没有问题。
问题是这样,编译器编译可以通过,也可以下载,但是在下载symbol(调试信息)时候
报错,我们怀疑是ccs3.3的配置问题。
工程本身是一个非常庞大的程序,以前在omap老的处理器上也可以正常调试,下载。
换了新的处理器omap3530以后,编译器换成了ccs3.3才有类似的问题,非常奇怪。
把=0 改成=NULL是不行的。
回3,4楼:
没有参数的构造函数是匹配的。而且如果该数组如果不是static的就没有问题。
问题是这样,编译器编译可以通过,也可以下载,但是在下载symbol(调试信息)时候
报错,我们怀疑是ccs3.3的配置问题。
工程本身是一个非常庞大的程序,以前在omap老的处理器上也可以正常调试,下载。
换了新的处理器omap3530以后,编译器换成了ccs3.3才有类似的问题,非常奇怪。
#1
错误提示:
Internal error: get_attr_value() found unrecognized attribute form
Internal error: get_attr_value() found unrecognized attribute form
#2
CTest(){m_pTest=0;}; // After delete t he structure function ,problem will die out
int* m_pTest;
---》这里的m_pTest是一个指向整形数据的指针变量,你构造函数中应该让这个指针指向某个整形变量才对啊,怎么把0赋值给m_pTest,我猜测楼主的意思应该是m_pTest=NULL才对吧,楼主可以试一下,是否可以麻烦告知,先谢谢了。
int* m_pTest;
---》这里的m_pTest是一个指向整形数据的指针变量,你构造函数中应该让这个指针指向某个整形变量才对啊,怎么把0赋值给m_pTest,我猜测楼主的意思应该是m_pTest=NULL才对吧,楼主可以试一下,是否可以麻烦告知,先谢谢了。
#3
和楼上观点有点不同哈。
class CTest
{
public:
CTest(){m_pTest=0;}; // After delete t he structure function ,problem will die out
int* m_pTest;
};
“下面是一个测试程序,去掉构造函数后就可以下载,现在这样就不行。”
楼主,如果加上了这个构造函数,则类CTest不具备默认构造函数。
s_value数组,你又没显示初始化,那么编译器就迷茫了,它不知道如何去初始化这个数组。
class CTest
{
public:
CTest(){m_pTest=0;}; // After delete t he structure function ,problem will die out
int* m_pTest;
};
“下面是一个测试程序,去掉构造函数后就可以下载,现在这样就不行。”
楼主,如果加上了这个构造函数,则类CTest不具备默认构造函数。
s_value数组,你又没显示初始化,那么编译器就迷茫了,它不知道如何去初始化这个数组。
#4
而如果楼主去掉了这个构造函数
则编译器在编译时,发现该类一个构造函数都没有
则编译器会自动为类CTest生成一个默认的构造函数,则可以通得过。
因为s_value数组,编译器可以通过调用CTest类的默认构造函数去初始化
则编译器在编译时,发现该类一个构造函数都没有
则编译器会自动为类CTest生成一个默认的构造函数,则可以通得过。
因为s_value数组,编译器可以通过调用CTest类的默认构造函数去初始化
#5
楼主如果非要定义一个自己的构造函数的话,要定义一个默认的构造函数,而不是现在这样。
这个怎么定义,相信楼主去看一下基础c++,楼主应该会的。
这个怎么定义,相信楼主去看一下基础c++,楼主应该会的。
#6
回2楼:
把=0 改成=NULL是不行的。
回3,4楼:
没有参数的构造函数是匹配的。而且如果该数组如果不是static的就没有问题。
问题是这样,编译器编译可以通过,也可以下载,但是在下载symbol(调试信息)时候
报错,我们怀疑是ccs3.3的配置问题。
工程本身是一个非常庞大的程序,以前在omap老的处理器上也可以正常调试,下载。
换了新的处理器omap3530以后,编译器换成了ccs3.3才有类似的问题,非常奇怪。
把=0 改成=NULL是不行的。
回3,4楼:
没有参数的构造函数是匹配的。而且如果该数组如果不是static的就没有问题。
问题是这样,编译器编译可以通过,也可以下载,但是在下载symbol(调试信息)时候
报错,我们怀疑是ccs3.3的配置问题。
工程本身是一个非常庞大的程序,以前在omap老的处理器上也可以正常调试,下载。
换了新的处理器omap3530以后,编译器换成了ccs3.3才有类似的问题,非常奇怪。