2013-01-16 4 views
1

код hc.cu:почему NVCC не устраивает функтора

//patch for g++4.7 
#ifdef _GLIBCXX_ATOMIC_BUILTINS 
#undef _GLIBCXX_ATOMIC_BUILTINS 
#endif 
#ifdef _GLIBCXX_USE_INT128 
#undef _GLIBCXX_USE_INT128 
#endif 

struct pi_ 
{ 
    double operator()() const 
    { 
     return 3.141592653589793; 
    } 
}; 

#include <iostream> 

int main() 
{ 
    std::cout << pi_()(); 

    return 0; 
} 

сборник приведет к двум (а не один) ошибки:

$nvcc -c hc.cu 
hc.cu: In function ‘int main()’: 
hc.cu:21:22: error: ‘type name’ declared as function returning a function 
hc.cu:21:22: error: ‘type name’ declared as function returning a function 

может кто-то пожалуйста скажите мне проблему? Я являюсь пользователем archlinux, использующим g ++ 4.7, и мне нужно определить два макроса, чтобы сделать работу nvcc; эти два undefs играют определенную роль в ошибках компиляции?

некоторые детали о CUDA:

$ pacman -Qi cuda 
Name   : cuda 
Version  : 5.0.35-3 
URL   : http://www.nvidia.com/object/cuda_home.html 
Licenses  : custom 
Groups   : None 
Provides  : cuda-toolkit cuda-sdk 
Depends On  : gcc-libs opencl-nvidia 
Optional Deps : gdb: for cuda-gdb 
Required By : cuda-z cula cusp 
Conflicts With : None 
Replaces  : cuda-toolkit cuda-sdk 
Installed Size : 1464880.00 KiB 
Packager  : Sven-Hendrik Haase <[email protected]> 
Architecture : x86_64 
Build Date  : Tue 30 Oct 2012 12:51:49 PM CET 
Install Date : Wed 09 Jan 2013 02:38:26 PM CET 
Install Reason : Explicitly installed 
Install Script : Yes 
Description : NVIDIA's GPU programming toolkit 

и г ++

pacman -Qi gcc-multilib 
Name   : gcc-multilib 
Version  : 4.7.2-3 
URL   : http://gcc.gnu.org 
Licenses  : GPL LGPL FDL custom 
Groups   : multilib-devel 
Provides  : gcc=4.7.2-3 
Depends On  : gcc-libs-multilib=4.7.2-3 binutils-multilib>=2.23  libmpc  cloog ppl 
Optional Deps : None 
Required By : boost-build chicken clang dkms gcc-fortran-multilib  gcc-objc-multilib ghc htmldoc libreoffice-sdk libtool virtualbox-host-dkms 
Conflicts With : gcc 
Replaces  : None 
Installed Size : 81560.00 KiB 
Packager  : Jan Alexander Steffens (heftig) <[email protected]> 
Architecture : x86_64 
Build Date  : Wed 26 Dec 2012 01:22:52 PM CET 
Install Date : Mon 31 Dec 2012 03:40:26 PM CET 
Install Reason : Installed as a dependency for another package 
Install Script : Yes 
Description : The GNU Compiler Collection - C and C++ frontends for multilib 
+2

выглядит как ошибка nvcc. 'pi _()()' работает в g ​​++ – kangshiyin

+0

Я начинаю думать, что это действительно и его просто ошибка. pi_() должен создать временный объект, действительный C++. – andre

ответ

3

Я могу повторить свою ошибку с моим NVCC в CUDA 5.0.

Похоже на ошибку nvcc.

pi_()() работает в g ​​++, но не в nvcc.

Чтобы заставить его работать в nvcc, вам нужно написать вот так.

pi_ p; 
std::cout<<p()<<std::endl; 

Я получаю эту ошибку при использовании (pi_())() в NVCC. Кажется, nvcc ошибочно относится к pi_ как к типу.

a.cu(14): error: cast to type "pi_()" is not allowed

a.cu(14): error: expected an expression

2 errors detected in the compilation of "/tmp/tmpxft_00003006_00000000-6_a.cpp1.ii".

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