相关疑难解决方法(0)

g ++和gcc有什么区别?

g ++和gcc有什么区别?哪些应该用于一般的c ++开发?

c++ gcc g++

816
推荐指数
8
解决办法
43万
查看次数

编译一些简单的c ++代码时出错

我尝试在osx lion上编译这个cpp代码,但是我收到了一个错误.

#include <iostream> 

using namespace std; 

int main (int argc, char *argv[]) 
{ 
    for(int i = 0; i < 10; i++) 
    { 
        cout << "hi"; 
        cout << endl; 
    } 

    return 0; 
}
Run Code Online (Sandbox Code Playgroud)

编译:

cc main.cpp
Run Code Online (Sandbox Code Playgroud)

错误:

Undefined symbols for architecture x86_64:
  "std::cout", referenced from:
      _main in ccBdbc76.o
  "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
      _main in ccBdbc76.o
  "std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)", referenced from:
      _main in ccBdbc76.o
  "std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> …
Run Code Online (Sandbox Code Playgroud)

c++ macos linker-errors

42
推荐指数
2
解决办法
5万
查看次数

C编程中的不动点算法

我正在尝试创建一个高精度存储股票价格的应用程序.目前我正在使用双倍这样做.为了节省内存,我可以使用任何其他数据类型吗?我知道这与定点运算有关,但我无法弄明白.

c fixed-point

24
推荐指数
3
解决办法
5万
查看次数

如果未定义的C ++行为满足C定义的行为会发生什么?

我有一个*.cpp使用C ++编译的文件(不是C编译器)。包含函数依赖于强制转换(请参见最后一行),该强制转换似乎是在C中定义的(如果我错了,请更正!),但对于这种特殊类型,则不在C ++中定义。

[...] C++ code [...]

struct sockaddr_in sa = {0};
int sockfd = ...;
sa.sin_family = AF_INET;
sa.sin_port = htons(port);
bind(sockfd, (struct sockaddr *)&sa, sizeof sa);

[...] C++ code [...]
Run Code Online (Sandbox Code Playgroud)

由于我将其编译为C ++文件,因此这是现在定义的还是未定义的行为?还是我需要将其移动到*.c文件中以使其定义为行为?

c c++ undefined-behavior

10
推荐指数
1
解决办法
279
查看次数

尝试在C++中使用结构时出错

我正在尝试低估如何在C++中使用结构作为列表.我提出了一段代码,对我来说,这不应该导致任何错误,但它确实......

我的代码是这样的:

struct item {
int data;
struct item *next;
};

struct item *begin = NULL;

void add(int x) {
    struct item *a = new struct item();
    a->data = x;
    a->next = begin;
    begin = a;
}

int main() {

    add(2);
    printf("%d\n", begin->data);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给了我这个:

Undefined symbols for architecture x86_64:
"operator new(unsigned long)", referenced from:
  add(int) in structtest-f49486.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see …
Run Code Online (Sandbox Code Playgroud)

c++ struct

3
推荐指数
1
解决办法
132
查看次数

完全专业化的模板功能

我有一个在头文件中声明的函数模板.该函数是一个归档程序,它应该支持通过项目实现的其他几种类型(类).我们的想法是拥有一个基本模板声明,然后每个类专门针对它自己的类型.

// Archiver.h
template <class T> void archive(Archiver & archiver, const T & obj);
Run Code Online (Sandbox Code Playgroud)

此方法没有实现.现在我创建一个类(比方说Header),我希望它可以存档.因此,我打算专门研究这种方法.这就是我现在拥有的:

// Header.h
extern template void archive(Archiver & archiver, const Header & obj);
Run Code Online (Sandbox Code Playgroud)

我声明该函数是extern因为我在.cpp文件中实现它

// Header.cpp
template <> void archive(Archiver & archiver, const Header & obj)
{
 // Code here
}
Run Code Online (Sandbox Code Playgroud)

这给了specialization after instantiation.我也尝试过其他组合:

  1. 直接在头文件中实现,通常建议用于模板:我得到"多重定义"
  2. 在头文件中没有声明的.cpp文件中的实现:我undefined reference从另一个编译单元调用该方法时得到

那么实现这个是正确的呢?

编辑:

最初我决定使用模板,因为反向过程,unarchiving.基本上我可以写,unarchive<Header>()而不是unarchive_header()似乎更合适.

我相信我还应该提到我正在使用Android Studio和Gradle构建系统编译它,这就是为什么我使用gcc而不是g ++.我还给了gcc以下编译器标志:

-std=gnu++11 -fexceptions -fpermissive -lstdc++
Run Code Online (Sandbox Code Playgroud)

-fpermissive 是一种绝望的行为.

c++ gcc templates template-instantiation

1
推荐指数
1
解决办法
301
查看次数