不能在c ++中定义main中的结构

时间:2017-09-16 10:22:45

标签: c++ struct structure

不能在c ++中定义main中的结构。

#include <iostream>
using namespace std;
int main()
{
    struct d
    {
        char name[20];
        int age;

    };
    struct d s,f;
    s = { "agent smith" , 17 };

    cout << s.name << " is 17 year old\n";
    return 0;
}

每当我编译我的代码时,我得到以下错误: -

$ g++ test.cpp 
test.cpp: In function ‘int main()’:
test.cpp:25:27: error: no match for ‘operator=’ (operand types are ‘main()::d’ and ‘<brace-enclosed initializer list>’)
  s = { "agent smith" , 17 };
                           ^
test.cpp:18:9: note: candidate: constexpr main()::d& main()::d::operator=(const main()::d&)
  struct d
         ^
test.cpp:18:9: note:   no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘const main()::d&’
test.cpp:18:9: note: candidate: constexpr main()::d& main()::d::operator=(main()::d&&)
test.cpp:18:9: note:   no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘main()::d&&’

我的代码有什么问题?我正如书中所说(c ++ primer Plus 6thED)

3 个答案:

答案 0 :(得分:1)

尝试显式构造函数:

s = d{ "agent smith" , 17 };

或使用显式initialization

进行定义
d s{"agent smith", 17};

(假设C++11,所以GCC - 至少GCC 6-编译with g++ -std=c++11 -Wall -Wextra -g

PS。不要学习比C ++更老的东西11。请注意,C ++ 17最近已经approved(2017年9月),但今天太年轻,无法实现成熟的实现。

答案 1 :(得分:1)

我认为您的问题在于您尝试使用初始化列表&#39;进行初始化。在你已经定义了变量之后。

这应该有效:

 d s = { "agent smith", 17 };
 d f = { "agent john",  19 };

答案 2 :(得分:-1)

该计划的工作版本:

  1. 使用扩展初始值设定项(使用{}时)使用-std=c++11编译选项
  2. 使用->来调用结构字段
  3. 使用结构(delete s
  4. 后的可用内存
  5. 使用string表示字符串字段或适当使用char数组(&#34;某些内容&#34;是字符串)

  6. #include <iostream>
    #include <string>
    using namespace std;
    
        struct d
        {
            string name;
            int age;
        };
    
    int main()
    {
        d *s = new d{ "agent smith" , 17 };
        cout << s->name << " is 17 year old\n";
        delete s;
        return 0;
    }