加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 错误:为“构造函数”属性指定的参数数量错误

发布时间:2020-12-16 06:56:51 所属栏目:百科 来源:网络整理
导读:在实际实现之前,我编写了一个小的原型代码,并将类构造函数和ctor构造函数放在同一个文件中,以查看ctor是否先执行,这是我的实际实现. 但是,我正面临一个错误.这是代码: #include stdlib.h#include string.h#include stdio.h#include iostreamusing namespace
在实际实现之前,我编写了一个小的原型代码,并将类构造函数和ctor构造函数放在同一个文件中,以查看ctor是否先执行,这是我的实际实现.

但是,我正面临一个错误.这是代码:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <iostream>

using namespace std;

extern "C" void startMe(void) __attribute__ ((constructor(1)));
extern "C" void ending(void) __attribute__ ((destructor));

class Test {

 public:

    Test()
    {
      cout << "This is test constructor" << endl;
    }
 };

 int main()
 {
  Test();
  printf("Now main calledn");
 }

 void startMe(void)
 {
  printf("Start me called before mainn");
 }

 void ending(void)
 {
  printf("Destructor calledn");
 }

Output:
 $g++ constructor1.cc 
 constructor1.cc:10: error: wrong number of arguments specified for ‘constructor’ attribute

但是,当我删除构造函数优先级时,它编译并运行正常.也就是说,我这样做:

extern "C" void startMe(void) __attribute__ ((constructor));

为什么会这样?如何优先考虑?

请帮我.我的想法是首先执行“ctor”,然后执行另一个(Test)构造函数.同样的原因,我把ctor作为优先事项1.

解决方法

按原样编译程序会产生:

warning: constructor priorities from 0 to 100 are reserved for the implementation

将优先级从1更改为101可以消除警告并且可执行文件生成:

Start me called before main
 This is test constructor
 Now main called
 Destructor called

这是使用GCC 4.5

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读