2017-12-18 36 views
0
#include<iostream> 
    #include <conio.h> 
    using namespace std; 

    struct book 
    { int bookid; 
     char title[20]; 
     float price; 
    }b2; 

int main() 
    { 
    b2={100,"c++ by saurabh",105.2}; //values initialised during variable declaration 

    cout<<"\n"<<b2.bookid; 
    cout<<b2.title<<" "<<b2.price; 
    return 0; 
    getch(); 
    } 

이 위의 코드는 다음과 같이 출력 오류 보여줍니다 :'연산자 ='(피연산자 유형은 '책'하고있다 '<중괄호로 둘러싸인 초기화리스트>')에 대한 일치

C:\Users\shandude\Documents\codeblock\cprog\struct2.cpp|13|error: no match for 'operator=' (operand types are 'book' and '')|

C:\Users\shandude\Documents\codeblock\cprog\struct2.cpp|5|note: no known conversion for argument 1 from '' to 'const book&'|

+0

'b2 = {100, "C++ by saurabh", 105.2}; '해야할 일은 무엇입니까? – Galen

+0

주제를 벗어나지 만 마지막 두 줄'return 0;과'getch();'가 바뀌어야합니다. 'getch();는 절대적으로 아무것도하지 않을 것입니다. 이 줄을 호출하기 전에 응용 프로그램이 반환됩니다. 또한 : 전역 범위에서'using namespace std; '를 사용하는 것은 결코 좋은 생각이나 좋은 습관이 아닙니다. –

+0

_initialize_'b2' ('b2' 생성 중 일부)를 코딩하거나 _assign_ 값을'b2 (생성 후 값)로 지정해야합니까? – chux

답변

0

을 당신 수행중인 작업은 b2이 이미 이전에 선언 되었기 때문에 초기화가 아니라 지정입니다. 당신은 변수가 선언 된 시점에서 초기화해야합니다

struct book 
    { int bookid; 
     char title[20]; 
     float price; 
    } b2 = {100,"c++ by saurabh",105.2}; //values initialised during variable declaration 

int main() 
{ 
    cout<<"\n"<<b2.bookid; 
    cout<<b2.title<<" "<<b2.price; 
    return 0; 
    getch(); 
} 
1

당신은 사용할 수 있습니다

b2 = book{100,"c++ by saurabh",105.2}; 

PS

나는 std::string에 멤버 변수 title을 변경하는 것이 좋습니다. 사용자 코드에서 문자열을 대표하는 char 배열의 사용은 당신이 list initialization에 의해 b2을 초기화하려고 2017

struct book 
{ 
    int bookid; 
    std::string title; 
    float price; 
}; 
+0

이미 1998 년 시대 착오적이지 않았습니까? ;) – Quentin

-1

년에 시대 착오적이다. 초기화 방법은 reference을 참조하십시오.
많은 방법이 있습니다. 간단한 방법은 다음과 같습니다.

book b2{100,"c++ by saurabh",105.2}; 
+2

'b2'은 이미 존재합니다. 코드는 초기화와 다른 * 할당하려고합니다. –

+0

당신의 솔루션은 나에게 내가 정확히 혼란스러워하는 정확한 답을 제공했습니다. 정말 고마워요. – shandude

0

어떤 컴파일러를 사용합니까?

#include <conio.h>을 제거하고 floatdouble으로 바꾸면 GCC가 불평하는 동안 Clang과 VC++ 모두이 코드를 허용합니다. 나는 이것이 GCC의 버그라고 생각한다.

이것은 초기화가 아니지만 initializer-list를 인자로하여 할당 연산자를 호출하는 것과 같습니다. 대입 연산자의 매개 변수는 const book&이며,이 initializer-list를 사용하여이 참조를 초기화하면 잘 정의됩니다. 이 프로그램은 잘 정의되어 있습니다.