C++ не может найти экземпляр функции шаблона ⇐ C++
-
Гость
C++ не может найти экземпляр функции шаблона
В настоящее время я работаю над своим личным проектом по расчету матриц с использованием Nvidia CUDA. Итак, у меня есть эти коды:
// файл Matrix_op.cuh шаблон __global__ void cuda_simple_op(T* data, ...other_args) { // здесь логика } // файл Matrix.h #include "matrix_op.cuh" шаблон класс Матрица { данные Т*; // другие реквизиты публика: // другие методы Матрица оператор+(const Matrix& другое) { Матрица resMat(M, N); cuda_simple_op (данные, ...other_args); // больше логики } } // файл main.cpp #include "matrix.h" интервал основной() { Matrix matA = Matrix::init(); Matrix matB = Matrix::init(); Матрица matC = matA + matB; } Я ожидал, что при компиляции файла main.cpp он сможет найти экземпляр функции cuda_simple_op(double), поскольку я уже указал double в Matrix в файле main.cpp.
Но когда я скомпилировал это с помощью nvcc -x cu main.cpp -o main, я получил эту ошибку:
ошибка: ни один экземпляр шаблона функции "cuda_simple_op" не соответствует списку аргументов. Типы аргументов: (double *, ...other_class) обнаружены во время создания экземпляра "Matrix Matrix::operator+(const Matrix &) [with T=double ]"
Как компилятор не может идентифицировать функцию cuda_simple_op в этом случае?
В настоящее время я работаю над своим личным проектом по расчету матриц с использованием Nvidia CUDA. Итак, у меня есть эти коды:
// файл Matrix_op.cuh шаблон __global__ void cuda_simple_op(T* data, ...other_args) { // здесь логика } // файл Matrix.h #include "matrix_op.cuh" шаблон класс Матрица { данные Т*; // другие реквизиты публика: // другие методы Матрица оператор+(const Matrix& другое) { Матрица resMat(M, N); cuda_simple_op (данные, ...other_args); // больше логики } } // файл main.cpp #include "matrix.h" интервал основной() { Matrix matA = Matrix::init(); Matrix matB = Matrix::init(); Матрица matC = matA + matB; } Я ожидал, что при компиляции файла main.cpp он сможет найти экземпляр функции cuda_simple_op(double), поскольку я уже указал double в Matrix в файле main.cpp.
Но когда я скомпилировал это с помощью nvcc -x cu main.cpp -o main, я получил эту ошибку:
ошибка: ни один экземпляр шаблона функции "cuda_simple_op" не соответствует списку аргументов. Типы аргументов: (double *, ...other_class) обнаружены во время создания экземпляра "Matrix Matrix::operator+(const Matrix &) [with T=double ]"
Как компилятор не может идентифицировать функцию cuda_simple_op в этом случае?
Мобильная версия