2016-11-25 44 views
0

功能分離到另一個源文件時,我有一個簡單的項目:錯誤使用C

method.h:

#pragma once 
#ifdef _METHOD_ 
#define _METHOD_ 

#include <stdio.h> 
#include <conio.h> 

int plus(int a, int b); 

#endif // _METHOD_ 

method.cpp:

#include "method.h" 

int plus(int a, int b) 
{ 
    return a+b; 
} 

Source.cpp:

#include <stdio.h> 
#include <conio.h> 

#include "method.h" 

void main() 
{ 
    int a = plus(4, 5); 
    printf("%d",a); 

    printf("\n"); 
    _getch(); 
} 

但是當我建立項目時, n錯誤發生: enter image description here

我是C編程的新手。 所以抱歉我的語法錯誤

+1

刪除的#ifdef _METHOD_ 的#define _METHOD_作爲曾經的#pragma做同樣的,如果你想使用警衛它應該是#ifndef .... –

+0

你能解釋一下關於刪除#ifdef方法#define方法 –

+0

哦對不起,#ifndef而不是#ifdef –

回答

3

刪除

#ifdef METHOD 
#define METHOD 

#pragma once做同樣的,如果你想使用警衛應該

#ifndef .... 

#ifdef _METHOD_將忽略頭文件,你永遠不會定義「_METHOD_

更新#1

根據MSDN#pragma once;

指定文件將被包括(打開)僅一次通過編譯源代碼文件時 編譯器。

+0

哦,對不起,ifndef而不是ifdef。非常感謝你^ _^ –

+2

@TrầnHồngPhát有用的閱讀有什麼在那裏:http://stackoverflow.com/questions/8020113/c-include-guards和https://en.wikipedia.org/wiki/Include_guard。 '#pragma once'是一種沒有被標準覆蓋的包含守衛,所以並不是所有的編譯器都支持它。事實上,'#pragma'就是這個意思。當你看到一個'#pragma'時,確保你的編譯器支持它,因爲如果沒有,編譯器可以默默地忽略它,並且可能發生很多調試。 [請注意'#pragma once'的一些問題](http://stackoverflow.com/a/34884735/4581301),它會阻止標準化。 – user4581301

1

首先,在你的頭文件中的變化 「的#ifdef 方法」 到 「的#ifndef 方法