я новичок в разработке с c. наверняка наступит день, когда мне понадобится твоя помощь. И я думаю, что это время сейчас :)
Что я пытаюсь сделать: я экспериментирую с MySQL Api в C. Для этого я хотел использовать структуру для хранения моего SQLQuery и всех его параметров, например. пользовательские данные для выбора или вставки.
Затем с помощью нескольких функций я хотел добавить, удалить и скомпилировать строку, чтобы использовать ее в запросе.
Чтобы использовать мою функцию createSqlQuery, я хотел бы передать в нее ссылку на мою структуру SQLQuery и изменить ее внутри функции. После завершения этой функции она не должна выходить за рамки и по-прежнему может использоваться в основной функции.
Вот где я сейчас застрял. Я предполагаю, что моя проблема довольно проста, но, посмотрев и попробовав ее в течение нескольких часов, я как бы слепой, чтобы увидеть решение. Используя этот вопрос: передача указателей/ссылок на структуры в функции я наконец случилось, что у него есть рабочий код, так что структура все еще может использоваться после завершения функции создания.
Но по какой-то причине я не могу скомпилировать свой код дальше, потому что он не может что-то присвоить моей структуре.
Сообщение об ошибке:
main.c:127:10: ошибка: запрос члена «addParam» в чем-то, что не является структурой или объединением
Это произошло после добавления второго символа * в функцию создания, чтобы получить указатель на указатель (см. другой вопрос о стеке).
Это то, что у меня есть до сих пор:
typedef struct sqlQuery sqlQuery;
struct sqlQuery{
char *queryS;
char **params; //array of array of chars to hold the params to replace %? in the query
bool (*addParam)(sqlQuery*, char*);
bool (*compile)(sqlQuery*);
};
int main(){
/* ... */
sqlQuery *testQuery = NULL;
printf("%p\n", &testQuery);
printf("%p\n", testQuery);
createSqlQuery(&testQuery,"SELECT * FROM test WHERE name = '%?'");
printf("%p\n", testQuery);
if (testQuery != NULL) printf("working, testQuery still assigned");
//testQuery->addParam(testQuery, "test");
//freeSqlQuery(testQuery);
exit(EXIT_SUCCESS);
}
bool createSqlQuery(sqlQuery **query, char *queryString){
*query = (struct sqlQuery *) malloc(sizeof(struct sqlQuery)); //get heapspace for sqlQuery Struct
printf("%p\n", *query);
//query->addParam = __sqlQueryAddParam; //link param function pointer
//query->compile = __compileSqlQuery; //link compile function pointer
*query->queryS = queryString; //save pointer to query String
//^^^ this is where the error occurs
return true;
}
Я также пробовал комбинации и варианты:
(sqlQuery *)*query->queryS = queryString;
с ** или &...
Я надеюсь, вы понимаете, с чем я борюсь, я думаю, это просто, но я действительно не могу понять это :)
Заранее спасибо!
typedef struct sqlQuery sqlQuery; struct sqlQuery { ... };
наtypedef struct { ... } sqlQuery;
? - person slugonamission   schedule 04.06.2013malloc()
в C. - person unwind   schedule 04.06.2013struct
из всех вариантов использованияstruct sqlQuery
. - person slugonamission   schedule 04.06.2013