Ссылка NullReferenceException или Object, не установленная на экземпляр объекта, возникает, когда объект класса, который вы пытаетесь использовать, не создается. Например:
Предположим, что у вас есть класс с именем Student.
public class Student
{
private string FirstName;
private string LastName;
public string GetFullName()
{
return FirstName + LastName;
}
}
Теперь рассмотрим другой класс, в котором вы пытаетесь получить полное имя учащегося.
public class StudentInfo
{
public string GetStudentName()
{
Student s;
string fullname = s.GetFullName();
return fullname;
}
}
Как видно из вышеприведенного кода, оператор Student s - объявляет только переменную типа Student, обратите внимание, что класс Student не создается в этой точке. Следовательно, когда выполняется выполнение инструкции s.GetFullName (), она выкинет исключение NullReferenceException.
nvcc
иногда имеет проблемы с компиляцией сложного кода шаблона, такого как найденный в Boost, даже если код используется только в функциях __host__
.
Если расширение файла .cpp
, nvcc
не выполняет никакого анализа и вместо этого пересылает код компилятору хоста, поэтому вы наблюдаете различное поведение в зависимости от расширения файла.
Если возможно, попробуйте выполнить карантинный код, который зависит от Boost в .cpp
, которые не нужно анализировать с помощью nvcc
.
Я также обязательно попробую nvcc
, который поставляется с последним CUDA 4.1 . Поддержка шаблона nvcc
улучшается с каждым выпуском.