2015-10-16 127 views
-1

我有以下代碼:無效的轉換,從「詮釋」到「詮釋*」 [-fpermissive]

#include <stdio.h> 
#include <stdlib.h> 
#include <iostream> 
#include <fstream> 
#include <string> 
#include <cstdlib> 

#define initialSize 50 

//Public GCC compiler-friendly macros 

#define n argv[2] 

using namespace std; 

struct Point { 
    int x; 
    int y; 
    int z; 
}; 


int smallest(Point* p, int n); 

int size = 0, max_size = initialSize; 
int *A = new int[max_size]; 


int main(int argc, char* argv[]) { 
     int test; 
     Point* p = new Point(); 
     smallest(p, test); 

    return 0; 
} 

int smallest(Point *p, int n) { 
return 0; 
} 

從我的理解,這應該是有效的語法C++。不過,我得到以下編譯錯誤:

test.cpp:32:20: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive] 
test.cpp:23:5: error: initializing argument 2 of ‘int smallest(Point*, int*)’ [-fpermissive] 

我使用命令:g++ -std=c++11 test.cpp

編輯:添加了完整的源代碼,而不是片段。嘗試在不同的環境,但遇到相同的編譯錯誤。

+7

編譯器認爲'最小'採用'int *'作爲其第二個參數,而不是'int'。最有可能的是,這裏顯示的代碼實際上並不是實際編譯的代碼。你已經顯示的代碼[編譯沒有錯誤](http://rextester.com/OCA2667) –

+0

不希望使用指針。聲明你的變量爲'Point p;'。這是C++語言,而不是C#或Java - 每個變量都不需要「新」。另外,考慮通過引用傳遞'Point'。 –

+0

謝謝你的評論。 @IgorTandetnik爲什麼編譯器認爲第二個參數是int *指針,而不是int? – WCGPR0

回答

1

第一:

#define n argv[2] 

二:

int smallest(Point* p, int n); 

三:

int test; 

第四:

smallest(p, test); 

我不知道爲什麼你需要定義,但它肯定他會這樣奇怪的行爲。

2

您發佈的代碼正確編譯。

儘量不要使用指針:

int smallest(const Point& p, int value) 
{ 
    return 0; 
} 

int main(void) 
{ 
    int test = 15; 
    Point p; 
    smallest(p, test); 
    return EXIT_SUCCESS; 
} 
+0

這是有效的。也許我沒有正確使用指針?現在我想到了,我肯定應該使用引用。然而,出於好奇,我在代碼中的語法錯誤在哪裏? – WCGPR0