2011-03-24 81 views
0

我在學習結構,分別在.h和.c文件中有下面的代碼。結構不編譯?

typedef struct{ 
    int lengthOfSong; 
    int yearRecorded; 
} Song; 

Song makeSong (int length, int year); 
void displaySong(Song theSong); 

.C:

Song makeSong(int length, int year){ 
    Song newSong; 
    newSong.lengthOfSong = length; 
    newSong.yearRecorded = year; 

    displaySong(newSong); 

    return newSong; 
} 

void displaySong(Song theSong){ 
    printf("This is the length of the song: %i \n This is the year recorded: %i", theSong.lengthOfSong, theSong.yearRecorded); 
} 

出於某種原因,我發現了錯誤:song.c:1:錯誤:預期 '=', '', ';',「ASM '或' 「前 'makeSong' song.c:11:錯誤:預期 '屬性)theSong '

我是不是做錯了什麼' 前'?

編輯主(其他功能已經工作):

#include <stdio.h> 
#include "math_functions.h" 
#include "song.h" 

main(){ 
    int differ = difference(10, 5); 
    int thesum = sum(3, 7); 
    printf("differnece: %i, sum: %i \n", differ, thesum); 
    Song theSong = makeSong(5, 8); 

} 
+3

難道你'#包括 「song.h」'? – 2011-03-24 21:55:36

+0

是的。見上面的主要部分。 (已編輯) – locoboy 2011-03-24 21:59:09

+1

您是否在.c文件中包含'#include「song.h」',其中包含'宋makeSong(int length,int year){'?根據編譯器的錯誤信息,看起來不是,因爲引用的行是第一行。 – Vlad 2011-03-24 22:04:14

回答

4

displaySong需要一個參數theSong,你正在嘗試使用newSong

您還可以從song.c需要#include "song.h" - 錯誤消息看起來像你跳過的。

+2

作爲一個附註,請使用'宋歌',而不是'宋theSong'。代碼中的文章很難看。 – alternative 2011-03-24 21:59:14

+0

請注意,編譯器已在第1行報告錯誤。順便說一句,這證明.c文件不包含#include :) – Vlad 2011-03-24 22:02:10

+0

雖然這是真的,但這不是問題。我解決了這個問題,但我仍然遇到同樣的問題。 – locoboy 2011-03-24 22:02:22

-1

編輯:搞砸typedef在我以前的答案:

typedef struct NAME1 { 
    ... 
} NAME2; 

NAME1名的結構,NAME2的explizit類型struct NAME1。 現在NAME1不能沒有struct用於C,NAME2可以:

struct NAME1 myvar1; 
NAME2 myvar2; 

你得到這個問題的原因Song不識別爲一個變量的類型(無前struct關鍵字)。

+0

-1:不正確。匿名結構的typedef不是無效的。 – Erik 2011-03-24 22:01:05

+0

它可以:http://ideone.com/0eBHf – Vlad 2011-03-24 22:01:43

+0

是的,搞砸了typedef,現在應該修復。 – Mario 2011-03-24 22:02:53

2

您需要在.c文件中#include "song.h"其中makeSong()displaySong()被定義。否則,編譯器不知道如何創建Song類型的對象。

+0

我做到了。看到上面的主要。 – locoboy 2011-03-24 22:09:19

+1

@ cfarm54:不是主要的。你還需要包含上面的'宋makeSong(int長度,int年){'。你需要包含在** ALL ** .c文件中。 – pmg 2011-03-24 22:10:55

+0

我想很多人都這樣說,但我有點困惑,我需要把#include也許。似乎我在我的main.c中找到了正確的地方,但是也許我需要把它放在其他地方呢? – locoboy 2011-03-24 22:14:38

1

隨着之前的更正,仍然出現錯誤,因爲程序在這兩個頭文件中都不包括song.h。源文件需要包括song.h(即在main.csong.c中,猜測您已經命名了源文件)。此外 -

Song makeSong(int length, int year){ 
    Song newSong; 
    newSong.lengthOfSong = length; 
    newSong.yearRecorded = year; 

    displaySong(newSong); 

    return newSong; 
} 

可以簡化爲 -

Song makeSong(int length, int year){ 

    Song newSong = { length, year } ; 

    displaySong(newSong); 

    return newSong; 
}