Вы превратили его в уроки о том, как кодировать, а не кодировать, как не использовать указатели и использовать std, когда все это был простой, быстро взломанный тестовый код, в котором я хотел что-то попробовать и неожиданно наткнулся на проблему компилятора.
Так умно, как вы не смогли превратить использование Array в std::vector или tShaderData* arr[] = { ... } и добавьте пустое тело функции в QuickSort::SortAscending(), чтобы создать компилируемый пример. Позвольте мне помочь всем вам, Эйнштейнам, в этом вопросе (см. ниже; извините за дополнительный код в стиле C — это не относится к вопросу).
Это показывает прежде всего одно: что вы не являетесь заинтересованы в том, чтобы дать некоторую конкретную помощь по поставленному вопросу, но делаете предположения, предположения, которые не могут быть дальше от реальности (моего кодирования), и что вас, очевидно, больше беспокоит покровительство людям, ищущим помощи здесь, чем фактическое участие в каком-либо помогите.
Я знаю, что этот пост получит больше отрицательных голосов, потому что это стало токсичным местом, где самодовольные люди ненавидят, когда их критикуют и выставляют напоказ недостатки их характера, но я оставлю этот вопрос, чтобы сообщить вы, каким вы кажетесь людям, которым не нужно поддерживать свое эго под предлогом помощи, как вы.
Люди вроде вас — причина, по которой я люблю, и, вероятно, многие другие предпочитают обращаться к чатгпт, Клод или другие если им нужна помощь, то обращайтесь сюда, потому что в отличие от вас чатгпт всегда дружелюбен, всегда конструктивен, никогда не унижает, никогда не снисходителен, никогда не покровительствует, никогда мелочно не настаивает на соблюдении правил, прежде чем соблаговолит ответить, и никогда полный себя. С машиной приятнее разговаривать, чем с вами, ребята. Пойди разберись.
Код: Выделить всё
template < class DATA_T >
class QuickSort {
public:
typedef int (*tComparator) (const DATA_T*, const DATA_T*);
void SortAscending(DATA_T* buffer, size_t left, size_t right, tComparator compare) {}
};
typedef struct {
const char* name;
const char* vs;
const char* fs;
Shader* shader;
} tShaderData;
class ShaderCode : public Shader {
public:
Array* m_shaders;
void CreateShaders(void);
ShaderCode()
: m_shaders(nullptr)
{ }
static int CompareShaders(const tShaderData** s1, const tShaderData** s2);
};
int ShaderCode::CompareShaders(const tShaderData** s1, const tShaderData** s2) {
return strcmp((*s1)->name, (*s2)->name);
}
void ShaderCode::CreateShaders(void) {
tShaderData* shaders[] ={
&colorShader,
&textureShader,
&outlineShader,
&boxBlurShader,
&fxaaShader,
&gaussBlurShader,
&fireworks1Shader,
&fireworks2Shader,
&fireworks3Shader,
&fireworks4Shader
};
QuickSort qs;
qs.SortAscending(shaders, 0, sizeof(shaders) / sizeof(shaders[0]), ShaderCode::CompareShaders);
//m_shaders->SortAscending((QuickSort::tComparator) ShaderCode::CompareShaders);
}
Код: Выделить всё
Array
Сообщение об ошибке:
QuickSort::SortAscending: не удалось преобразовать все типы аргументов.
Скомпилировано с помощью VS 2022, C++ 20, режим отладки. Все функции — __decl. Я не могу здесь определить разницу в типах.
Изменить:
- Это весь журнал ошибок. Если бы компилятор рассказал мне, что он видит и что он ожидает, я бы, вероятно, не писал здесь.
- Если я приведу тип параметра ShaderCode::CompareShaders, мой код компилируется. Но я нахожу это весьма подозрительным.
Очень утомительно, как меня надрали как писать код на C++, когда это всего лишь короткий, быстро взломанный фрагмент кода, обнаруживающий проблемы в некоторых сигнатурах функций.
3 уже отклонили это все более токсичное сообщество. Люди, подобные вам, превращают ТАК в дерьмо.
Подробнее здесь: https://stackoverflow.com/questions/792 ... actual-c-f