2016-04-28 2 views
-2

У меня есть 3 файла:аргументы Передача по ссылке в файле заголовка

file1.h

#ifndef FILE_H_INCLUDED 
#define FILE_H_INCLUDED 

#include <stdbool.h> // To prevent unknown type 'bool' error 
bool parse(char** &buffer); 

#endif 

file1.cpp

#include "file1.h" 
#include <iostream> 

using namespace std; 

bool parse(char** &buffer) { 
    buffer[0] == "test"; 
} 

И file2.cpp включает file1.h и вызовы анализирующие() с буфером char **;

При компиляции я получаю:

error: expected ';', ',' or ')' before & token 

Что мне не хватает?

EDIT: Я строю проект, который использует сырые сокеты, и это в основном код C.

+3

* Для того, чтобы предотвратить неизвестный тип «» Ьоо ошибка * ... вы, вероятно, с помощью C компилятор вместо компилятора C++ – Praetorian

+0

Если вы используете компилятор C++, вы можете упростить использование std :: string & вместо char ** &. –

+0

В какой системе вы работаете? Какой компилятор? Если вы используете Linux, попробуйте использовать g ++ вместо gcc для ее компиляции. –

ответ

2

Вы используете компилятор C, а не компилятор C++.

0

Я думаю, что вы на самом деле пытаетесь сделать, это передать массив символьных указателей, поэтому вы можете изменить функцию

bool parse(char** buffer); 
0

Компилятор, в режиме языка C, жалуется о & символ:

bool parse(char ** &buffer) 

язык C не позволяет & характера в этом контексте.

Однако, это действительный синтаксис C++, так как функции требуется указатель, переданный по ссылке.

Как уже говорилось, переключитесь на компилятор C++ или скажите компилятору, чтобы он был компилирован в качестве языка C++.

0

Эта подсказка:

bool parse(char** &buffer) { 
    buffer[0] == "test"; 
} 

Указывает, что «буфер» должен быть какой-то ссылки на какой-то массив строк. Не знаю, почему она возвращается логическое значение

Вы должны рассмотреть (которые вы упускается из виду, во всяком случае.):

// a std::vector of std::string 
typedef std::vector<std::string> StrVec_t; 

// parse can easily add individual std::strings 
// to the std::vector (from some unknown source) 
bool parse (StrVec_t& buffer) 
{ 
    buffer.push_back(std::string("test")); // tbd - where did 'test' come from? 
    return(true); // and add some meaning to this, or perhaps remove 
} 

// and is used as 
// ... 
StrVec_t myWords; 
// ... 
// ... 
(void)parse(myWords); // update myWords from some other source 
// ...    // example of how to discard bool 
+0

И да, для этого потребуется компилятор C++. –

Смежные вопросы