2015-12-16 66 views
2

即時試圖計算帶結構的分數,編譯器說,初始化器列表不能轉換,究竟是什麼問題?這裏是我的代碼計算結構中的分數c

#include <stdio.h> 

struct fraction{ 
    int z = 0; 
    int n = 1; 
}; 
struct fraction addition(struct fraction b1, struct fraction b2) { 
    struct fraction result; 
    result.z = b1.z*b2.n + b2.z*b1.n; 
    result.n = b1.n*b2.n; 

    return result; 
    } 

void Print(struct fraction b) { 
    printf("%d/%d\n", b.z, b.n); 

} 
int main() { 
    int i; 
    struct fraction b1 = { 1,1 }, b2 = { 1,2 }; 
    try { 
     for (i = 1; i <= 6; i++) { 

     Print(addition(b1, b2)); 

    } 
} 
    catch (int exception) { 
     printf("Program closed!"); 
    } 
} 

了由單向循環是調和級數,但我不是用它做呢。感謝您的幫助提前

+0

'int z = 0; int n = 1;' - >'int z; int n;'。 – BLUEPIXY

+0

C或C++?標題說「C」,標籤說「C++」。 –

+0

@ Sparkm4n我刪除了你的C標籤。因爲你的代碼顯然是C++而不是C。但是後來我注意到你的標題是C.請說明你正在使用哪種語言。它們並不相同,每種語言的答案可能不同。 – kaylum

回答

2

刪除分配的值從結構(對於C++ 11及以下) :

struct fraction{ 
    int z; 
    int n; 
}; 

現在它編譯好了,用g ++ 5.2.1進行了測試(應該也爲其他編譯器完成工作)。

當我添加選項-std=c++14你的代碼編譯得很好,沒有任何改變。

2

當您使用C++時,您不需要使用struct fraction。你可以但你不需要。您只能使用fraction

編輯到有問題的線路:

struct fraction b1 = { 1,1 }, b2 = { 1,2 }; 

可以使用:

fraction b1{ 1,1 }; 
fraction b2{ 1,2 }; 

fraction b1 = fraction{ 1,1 }, b2 = fraction{ 1,2 }; 
0

http://en.cppreference.com/w/cpp/language/aggregate_initialization 我讀了用戶定義的構造函數將用大括號初始化阻止你,而且我想,在初始化該結構的變量會像一個用戶自定義構造函數。

沒有用戶提供的構造(顯式默認或刪除構造允許)(因爲C++ 11)

所以寫只是:

struct fraction{ 
    int z; 
    int n; 
}; 

應該解決的問題

+0

「初始化結構體中的變量」由關於該cppreference頁面上的默認成員初始化程序的項目符號點覆蓋。 – Cubbi

1

這裏是我的想法,你怎麼能解決這個問題

#include "stdafx.h" 

int euclid(int a, int b); 

struct fraction { 
    int z; 
    int n; 
}; 

typedef struct fraction Bruch; 

Bruch add(Bruch b1, Bruch b2) { 
    Bruch r; 
    r.z = b1.z * b2.n + b2.z * b1.n; 
    r.n = b1.n * b2.n; 
    return r; 
} 

void print(Bruch b) { 
    printf("%d/%d \n", b.z, b.n); 
} 


void test() { 
    Bruch eins = {1,1}; 
    Bruch halb = {1,2}; 

    printf(" ---------------- structure---------------- \n"); 
    Bruch sum = add(eins, halb); 
    print(sum); 

    sum.z = 0; 
    sum.n = 1; 

    Bruch summand = {1,1}; 

    for(int n=1; n<=6; ++n) { 
     summand.nenner = n; 
     sum = add(sum, summand); 
     print(sum); 
    } 
}